Php 动态地将值插入嵌套JSON对象内的索引数组?
我有一个使用json_decode创建的嵌套对象,我想在PHP中动态循环并更改其中的特定值。我要更改的键的路径存储在一个索引数组中,我将该数组传递给我的函数,数组中的最后一项包含该键 包含键路径的数组如下所示:Php 动态地将值插入嵌套JSON对象内的索引数组?,php,arrays,json,object,Php,Arrays,Json,Object,我有一个使用json_decode创建的嵌套对象,我想在PHP中动态循环并更改其中的特定值。我要更改的键的路径存储在一个索引数组中,我将该数组传递给我的函数,数组中的最后一项包含该键 包含键路径的数组如下所示: array(3) { [0]=> string(6) "level1" [1]=> string(6) "level2" [2]=> string(6) "level3" } { "level1": { "level2": {
array(3) {
[0]=>
string(6) "level1"
[1]=>
string(6) "level2"
[2]=>
string(6) "level3"
}
{
"level1": {
"level2": {
"level3": "value"
}
}
}
我的对象$obj
如下所示:
array(3) {
[0]=>
string(6) "level1"
[1]=>
string(6) "level2"
[2]=>
string(6) "level3"
}
{
"level1": {
"level2": {
"level3": "value"
}
}
}
当它是所有对象时,在for循环中,我可以执行以下操作:
for($i = 0; $i < count($array); $i++) {
$obj = $obj->{$array[$i]};
if($i == count($array)-1) $obj = $value;
}
如果我这样做:
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($i=0;$i{$array[$i]};
如果($i==count($array)-1){
如果(gettype($obj)='object')$obj=$value;
else if(gettype($obj)='array')array_push($obj,$value);
}
}
当我var\u dump
在for循环中修改数组时,我得到了预期的结果。但是,通过这种方式,对象中的原始数组保持不变。如何实现在对象中而不是仅在局部范围中更改数组
似乎只有在静态访问时,我才能实现该行为,如:array\u push($obj->level1->level2->level3,$value)代码>
但我想不出一个动态的方法来实现这一点
我希望我说得很清楚,每个人都有可能解决这个问题。也许这可以帮助你我不确定我是否正确理解你的问题,但是你可以用&
引用PHP中的对象和数组,所以你可以像这样尝试$obj=&$obj->{$array[$I]}
修改原始数组而不是副本。@xander谢谢,这正是我所缺少的,很简单,工作起来很有魅力。