Я сделал следующий массив:
$clasa = array( 'e1' => array('nume' => 'Nitu', 'prenume' => 'Andrei', 'sex' => 'm', 'varsta' => 23), 'e2' => array('nume' => 'Nae', 'prenume' => 'Ionel', 'sex' => 'm', 'varsta' => 27), 'e3' => array('nume' => 'Noman', 'prenume' => 'Alice', 'sex' => 'f', 'varsta' => 22), 'e4' => array('nume' => 'Geangos', 'prenume' => 'Bogdan', 'sex' => 'm', 'varsta' => 23), 'e5' => array('nume' => 'Vasile', 'prenume' => 'Mihai', 'sex' => 'm', 'varsta' => 25) );
Я хотел бы знать, как преобразовать этот массив в объект, используя stdClass (), я начинающий PHP, простой пример был бы очень полезен, я попытался найти похожие вопросы, но ответы сложны и выходят за рамки мое понимание основных классов и объектов.
Вы просто добавляете этот код
$clasa = (object) array( 'e1' => array('nume' => 'Nitu', 'prenume' => 'Andrei', 'sex' => 'm', 'varsta' => 23), 'e2' => array('nume' => 'Nae', 'prenume' => 'Ionel', 'sex' => 'm', 'varsta' => 27), 'e3' => array('nume' => 'Noman', 'prenume' => 'Alice', 'sex' => 'f', 'varsta' => 22), 'e4' => array('nume' => 'Geangos', 'prenume' => 'Bogdan', 'sex' => 'm', 'varsta' => 23), 'e5' => array('nume' => 'Vasile', 'prenume' => 'Mihai', 'sex' => 'm', 'varsta' => 25) );
Если вы хотите увидеть, этот объект stdClass просто вызывает это
print_r($clasa);
Если вы хотите преобразовать массив в код объекта, будет
$arr = array('a'=>'apple','b'=>'ball'); $arr = (object) $arr;
Вам не нужно использовать stdClass. Он автоматически преобразуется в stdClass
Быстрый и грязный способ использования json_encode
и json_decode
который превратит весь массив (включая подэлементы) в объект.
$clasa = json_decode(json_encode($clasa)); //Turn it into an object
То же самое можно использовать для преобразования объекта в массив. Просто добавьте , true
для json_decode
для возврата связанного массива:
$clasa = json_decode(json_encode($clasa), true); //Turn it into an array
Альтернативный способ (без загрязнения) – это просто рекурсивная функция:
function convertToObject($array) { $object = new stdClass(); foreach ($array as $key => $value) { if (is_array($value)) { $value = convertToObject($value); } $object->$key = $value; } return $object; }
или в полном коде:
<?php function convertToObject($array) { $object = new stdClass(); foreach ($array as $key => $value) { if (is_array($value)) { $value = convertToObject($value); } $object->$key = $value; } return $object; } $clasa = array( 'e1' => array('nume' => 'Nitu', 'prenume' => 'Andrei', 'sex' => 'm', 'varsta' => 23), 'e2' => array('nume' => 'Nae', 'prenume' => 'Ionel', 'sex' => 'm', 'varsta' => 27), 'e3' => array('nume' => 'Noman', 'prenume' => 'Alice', 'sex' => 'f', 'varsta' => 22), 'e4' => array('nume' => 'Geangos', 'prenume' => 'Bogdan', 'sex' => 'm', 'varsta' => 23), 'e5' => array('nume' => 'Vasile', 'prenume' => 'Mihai', 'sex' => 'm', 'varsta' => 25) ); $obj = convertToObject($clasa); print_r($obj); ?>
который выводит (обратите внимание, что нет массивов – только stdClass
):
stdClass Object ( [e1] => stdClass Object ( [nume] => Nitu [prenume] => Andrei [sex] => m [varsta] => 23 ) [e2] => stdClass Object ( [nume] => Nae [prenume] => Ionel [sex] => m [varsta] => 27 ) [e3] => stdClass Object ( [nume] => Noman [prenume] => Alice [sex] => f [varsta] => 22 ) [e4] => stdClass Object ( [nume] => Geangos [prenume] => Bogdan [sex] => m [varsta] => 23 ) [e5] => stdClass Object ( [nume] => Vasile [prenume] => Mihai [sex] => m [varsta] => 25 ) )
Таким образом, вы можете обратиться к нему с помощью $obj->e5->nume
.
DEMO
Если вы хотите, чтобы рекурсивно преобразовать весь массив в тип объекта (stdClass), ниже приведен лучший метод, и он не требует больших затрат времени или памяти, особенно если вы хотите сделать рекурсивное (многоуровневое) преобразование по сравнению с написанием вашего собственной функции.
$array_object = json_decode(json_encode($array));
Чтобы преобразовать массив в объект, используя stdClass, просто добавьте (object)
в массив u declare.
EX:
echo $array['value']; echo $object->value;
преобразовать объект в массив
$obj = (object)$array;
преобразовать массив в объект
$arr = (array)$object
с помощью этих методов вы можете легко переключаться между массивом и объектом.
Другим методом является использование json
$object = json_decode(json_encode($array), FALSE);
Но это гораздо более интенсивный процесс памяти и не поддерживается версиями PHP <= 5.1
Массив для stdClass можно сделать в php таким образом. (stdClass уже является родовым пустым классом PHP)
$a = stdClass:: __set_state(array());
На самом деле вызов stdClass :: __ set_state () в PHP 5 приведет к фатальной ошибке. спасибо @Ozzy за указание
Это пример того, как вы можете использовать __set_state () с объектом stdClass в PHP5
class stdClassHelper{ public static function __set_state(array $array){ $stdClass = new stdClass(); foreach ($array as $key => $value){ $stdClass->$key = $value; } return $stdClass; } } $newstd = stdClassHelper::__set_state(array());
Или лучше.
$a = (object) array();
Одним из самых простых решений является
$objectData = (object) $arrayData
или вы можете использовать эту вещь
$arr = [1,2,3]; $obj = json_decode(json_encode($arr)); print_r($obj);
используйте этот учебник
<?php function objectToArray($d) { if (is_object($d)) { // Gets the properties of the given object // with get_object_vars function $d = get_object_vars($d); } if (is_array($d)) { /* * Return array converted to object * Using __FUNCTION__ (Magic constant) * for recursive call */ return array_map(__FUNCTION__, $d); } else { // Return array return $d; } } function arrayToObject($d) { if (is_array($d)) { /* * Return array converted to object * Using __FUNCTION__ (Magic constant) * for recursive call */ return (object) array_map(__FUNCTION__, $d); } else { // Return object return $d; } } // Create new stdClass Object $init = new stdClass; // Add some test data $init->foo = "Test data"; $init->bar = new stdClass; $init->bar->baaz = "Testing"; $init->bar->fooz = new stdClass; $init->bar->fooz->baz = "Testing again"; $init->foox = "Just test"; // Convert array to object and then object back to array $array = objectToArray($init); $object = arrayToObject($array); // Print objects and array print_r($init); echo "\n"; print_r($array); echo "\n"; print_r($object); //OUTPUT stdClass Object ( [foo] => Test data [bar] => stdClass Object ( [baaz] => Testing [fooz] => stdClass Object ( [baz] => Testing again ) ) [foox] => Just test ) Array ( [foo] => Test data [bar] => Array ( [baaz] => Testing [fooz] => Array ( [baz] => Testing again ) ) [foox] => Just test ) stdClass Object ( [foo] => Test data [bar] => stdClass Object ( [baaz] => Testing [fooz] => stdClass Object ( [baz] => Testing again ) ) [foox] => Just test )