Ben bu eski bir sorudur farkında ama rastlamak başkalarının yararına, son zamanlarda bu kendim çözmüş ve Açıkçası yerleşik hiçbir önlem vardır sonucu
<?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);
paylaşmak istedim Ana uyarısı, updateObjFromArray
işlevinin $array
içindeki iç içe geçmiş diziler için $obj
'daki ilgili anahtarın zaten var olduğunu ve bir nesnenin olduğunu doğrulaması veya bir nesnenin bir hata yapması gibi davranması gerektiği varsayılmaktadır.
Bu yardımcı olur umarız! :)
Neden bu şekilde kodun yaptıklarını gizlemek istersiniz? Gelecekte bir noktada (** belki siz **) bu kodu okumalı ve böyle bir şey yapması sadece onu anlamak için daha zor hale getirecektir. – rdlowrey
Bunu neden sadece bir php dosyasına yapıştırıp çalıştırmıyorsunuz? İşe yarayacak mı diye sormak yerine, sadece kendiniz deneyin. – Yoshi
Sadece sizin için bunu yapmak için bir yardımcı işlev oluşturun. Nesne ve dizi içinde geçirin. –