Как преобразовать массив в объект с помощью stdClass ()

Я сделал следующий массив:

$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, простой пример был бы очень полезен, я попытался найти похожие вопросы, но ответы сложны и выходят за рамки мое понимание основных классов и объектов.

Related of "Как преобразовать массив в объект с помощью stdClass ()"

Вы просто добавляете этот код

 $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 )