recorrer que objetos objeto lista leer iterar crear array acceder php arrays stdclass

php - que - Cómo convertir una matriz en un objeto usando stdClass()



que es un objeto en php (8)

Array to stdClass se puede hacer en php de esta manera. (stdClass ya es la clase genérica vacía de PHP)

$a = stdClass:: __set_state(array());

En realidad, llamar a stdClass :: __ set_state () en PHP 5 producirá un error fatal. gracias @Ozzy por señalar

Este es un ejemplo de cómo puede usar __set_state () con un objeto stdClass en 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());

O una forma más agradable.

$a = (object) array();

Hice la siguiente matriz:

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

Me gustaría saber cómo convertir esta matriz en un objeto usando stdClass (), soy un principiante de PHP, un ejemplo simple sería muy útil, intenté buscar preguntas similares, pero las respuestas son complicadas y van más allá mi comprensión de las clases y objetos básicos.


La manera rápida y sucia es usar json_encode y json_decode que convertirán toda la matriz (incluidos los elementos secundarios) en un objeto.

$clasa = json_decode(json_encode($clasa)); //Turn it into an object

Lo mismo se puede usar para convertir un objeto en una matriz. Simplemente agregue , true a json_decode para devolver una matriz asociada:

$clasa = json_decode(json_encode($clasa), true); //Turn it into an array

Una forma alternativa (sin estar sucia) es simplemente una función recursiva:

function convertToObject($array) { $object = new stdClass(); foreach ($array as $key => $value) { if (is_array($value)) { $value = convertToObject($value); } $object->$key = $value; } return $object; }

o en código completo:

<?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); ?>

qué salidas (tenga en cuenta que no hay matrices, solo 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 ) )

Entonces te referirías a él por $obj->e5->nume .

DEMO


Para convertir una matriz a un objeto usando stdClass, simplemente agregue (object) a la matriz u declarar.

EX:

echo $array[''value'']; echo $object->value;

convertir objeto a matriz

$obj = (object)$array;

convertir matriz a objeto

$arr = (array)$object

con estos métodos puede intercambiar entre matriz y objeto muy fácilmente.

Otro método es usar json

$object = json_decode(json_encode($array), FALSE);

Pero esta es una forma mucho más intensiva de memoria para hacer y no es compatible con las versiones de PHP <= 5.1.


Si desea convertir de forma recursiva toda la matriz en un tipo de objeto (stdClass), a continuación se muestra el mejor método y no requiere mucho tiempo ni memoria deficiente, especialmente cuando desea realizar una conversión recursiva (niveles múltiples) en comparación con escribir su propia función.

$array_object = json_decode(json_encode($array));


Una de las soluciones más fáciles es

$objectData = (object) $arrayData


Usted acaba de agregar este código

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

Si desea ver es este objeto stdClass solo llame a esto

print_r($clasa);

Si desea convertir una matriz en código objeto será

$arr = array(''a''=>''apple'',''b''=>''ball''); $arr = (object) $arr;

No necesita usar stdClass. Se convertirá automáticamente a stdClass


o puedes usar esta cosa

$arr = [1,2,3]; $obj = json_decode(json_encode($arr)); print_r($obj);


usa este Tutorial

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