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

时间:2018-04-18 07:58:19

标签: php arrays json object

我有一个使用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); 但我无法想到实现这一目标的动态方法。

我希望我说得很清楚,任何人都可以解决这个问题。

0 个答案:

没有答案