に多次元配列データを適用$obj
:(CouchDBのからロードされた)所定のPHPオブジェクトのオブジェクト
class stdClass#1 (3) {
public $_id =>
string(10) "nochecksum"
public $_rev =>
string(34) "1-4f734a24465bf7ba2de316fe87ffa0c1"
public $rooms =>
class stdClass#2 (1) {
public $kitchen =>
class stdClass#3 (1) {
public $ceilingFan =>
bool(false)
}
}
}
およびデータ$arr
の所定の多次元配列、プロパティの変更または新しい値からなるため
array(1) {
'rooms' =>
array(1) {
'kitchen' =>
array(1) {
'needsCleaning' =>
bool(true)
}
}
}
$obj
のプロパティを$arr
の値に設定するにはどうすればよいですか?
ソリューションは、1次元配列のために簡単です:
foreach ($arr as $k=>$v) {
$obj->{$k}=$v;
}
私は再帰関数を試してみましたが、私は親(複数可)を参照する方法がわからない:
$obj = setObjectFromArray($obj, $arr);
function setObjectFromArray($obj, $arr, $tree=Array())
{
foreach ($arr as $k=>$v) {
if (is_array($v)) {
$tree[]=$k;
$obj = setObjectFromArray($obj, $v, $tree);
} else {
// Here $tree is Array('rooms','kitchen')
// I want to set $obj->rooms->kitchen->{$k}
}
}
return $obj;
}
私は、オブジェクトのプロパティのリファレンスを再帰関数に渡すとうまくいくかもしれないと思っていますが、私は教育的な推測をするには十分理解していません。
$r = array(
'rooms' => array(
'kitchen' => array(
'needsCleaning' => true
)
)
);
echo '<pre>',print_r(json_decode(json_encode($r))), '</pre>';
説明:あなたはJSON文字列に配列をコード化して、この文字列をデコードし、それは、json
関数のペアだ - すべてのヘルプは、このソリューションは完全に明白ではない、多分どこかが、まだ失敗する可能性が