Comprendo que esto es una cuestión de edad, sino para el beneficio de otros que vienen a través de ella, he resuelto esto mismo hace poco y quería compartir el resultado
<?php
//Just some setup
header('Content-Type: text/plain');
$account = (object) array(
'email' => 'foo',
'dob'=>((object)array(
'day'=>1,
'month'=>1,
'year'=>((object)array('century'=>1900,'decade'=>0))
))
);
var_dump($account);
echo "\n\n==============\n\n";
//The functions
function &getObjRef(&$obj,$prop) {
return $obj->{$prop};
}
function updateObjFromArray(&$obj,$array){
foreach ($array as $key=>$value) {
if(!is_array($value))
$obj->{$key} = $value;
else{
$ref = getObjRef($obj,$key);
updateObjFromArray($ref,$value);
}
}
}
//Test
updateObjFromArray($account,array(
'id' => '123',
'email' => '[email protected]',
'dob'=>array(
'day'=>19,
'month'=>11,
'year'=>array('century'=>1900,'decade'=>80)
)
));
var_dump($account);
Obviamente no hay medidas de seguridad integradas en La advertencia principal es que la función updateObjFromArray
asume que para cualquier matriz anidada dentro de $array
, la clave correspondiente en $obj
ya existe y es un objeto, esto debe ser cierto o tratarlo como si un objeto arrojara un error.
Espero que esto ayude! :)
¿Por qué querrías ofuscar lo que el código está haciendo de esta manera? En algún momento, alguien (** quizás usted **) tendrá que leer este código y hacer algo como esto solo lo hará más difícil de entender. – rdlowrey
¿Por qué no simplemente pegar esto en un archivo php y ejecutarlo? En lugar de preguntar aquí si funcionaría, inténtalo tú mismo. – Yoshi
Simplemente crea una función auxiliar para hacerlo por ti. Pase el objeto y la matriz. –