Как преобразовать массив в объект с помощью 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, простой пример был бы очень полезен, я пробовал искать подобные вопросы, но ответы сложны и выходят за рамки моего понимания основных классов и объектов.
8 ответов:
вы просто добавляете этот код
$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' s):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.
Если вы хотите рекурсивно преобразовать весь массив в тип объекта (stdClass), то ниже приведен лучший метод, и это не требует много времени или нехватки памяти, особенно когда вы хотите сделать рекурсивное (многоуровневое) преобразование по сравнению с написанием собственной функции.
$array_object = json_decode(json_encode($array));
чтобы преобразовать массив в объект с помощью stdClass просто добавьте
(object)для объявления массива u.пример:
echo $array['value']; echo $object->value;для преобразования объекта в массив
$obj = (object)$array;для преобразования массива в объект
$arr = (array)$objectС помощью этих методов вы можете очень легко переключаться между массивом и объектом.
другой метод заключается в использовании json
$object = json_decode(json_encode($array), FALSE);но это гораздо более интенсивный способ работы с памятью и не поддерживается версиями PHP
массива stdClass можно сделать в php таким образом. (stdClass уже является общим пустым классом PHP)
$a = stdClass:: __set_state(array());фактически вызов stdClass::__set_state() в PHP 5 приведет к фатальной ошибке. спасибо @Оззи за указание
Это пример того, как вы можете использовать __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();
или вы можете использовать эту вещь
$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 )
Comments