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