Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 动态地将值插入嵌套JSON对象内的索引数组?_Php_Arrays_Json_Object - Fatal编程技术网

Php 动态地将值插入嵌套JSON对象内的索引数组?

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": {

我有一个使用json_decode创建的嵌套对象,我想在PHP中动态循环并更改其中的特定值。我要更改的键的路径存储在一个索引数组中,我将该数组传递给我的函数,数组中的最后一项包含该键

包含键路径的数组如下所示:

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谢谢,这正是我所缺少的,很简单,工作起来很有魅力。