我有一个使用json_decode创建的嵌套对象,我希望在PHP中动态循环并更改其中的特定值。我想要改变的键的路径存储在一个索引数组中,我传递给我的函数,其中数组中的最后一项包含键。
包含密钥路径的数组如下所示:
array(3) {
[0]=>
string(6) "level1"
[1]=>
string(6) "level2"
[2]=>
string(6) "level3"
}
我的对象$obj
看起来像这样:
{
"level1": {
"level2": {
"level3": "value"
}
}
}
当它是所有对象时,在我的for循环中我可以这样做:
for($i = 0; $i < count($array); $i++) {
$obj = $obj->{$array[$i]};
if($i == count($array)-1) $obj = $value;
}
=&GT;因此,改变原始对象。
但是,我坚持使用上面的方法将一个新值插入到我的JSON对象的索引数组中。请考虑以下示例中的“level3”表示对象内的索引数组。
{
"level1": {
"level2": {
"level3": []
}
}
}
如果我这样做:
for($i = 0; $i < count($array); $i++) {
$obj = $obj->{$array[$i]};
if($i == count($array)-1) {
if(gettype($obj) == 'object') $obj = $value;
else if(gettype($obj) == 'array') array_push($obj, $value);
}
}
当我在for循环中var_dump
更改了数组时,我得到了预期的结果。但是这样,我对象内的原始数组保持不变。如何在我的对象中而不是仅在本地范围内实现更改的数组?
似乎我只能在静态访问它时才能实现这种行为,如下所示:array_push($obj->level1->level2->level3, $value);
但我无法想到实现这一目标的动态方法。
我希望我说得很清楚,任何人都可以解决这个问题。