3

我一直在寻找几个小时,阅读http://php.net/manual/en/language.variables.variable.php的所有评论,但没有找到解决我问题的方法:(

有一个多维数组,例如:

Array
(
    [53] => Array
    (
        [59] => Array
            (
                [64] => Array
                    (
                        [65] => Array
                            (
                            )
                        [66] => Array
                            (
                            )
                    )
            )
    )
[67] => Array
    (
    )
[68] => Array
    (
        [69] => Array
            (
            )
    )

)

我需要用另一个数组替换 $foo[53][59][64][65] 。“路径”可作为字符串使用,即“53.59.64.65”或“[53][59][64][65]”。

解决此问题的正确语法是什么?

4

1 回答 1

3
$array = array(
    5 => array(
        6 => array(
            7 => 'Hello'
        )
    )
);

// key of the object to replace
$path = "[5][6][7]";
// gets the int values from the keys
if (preg_match_all('/\[(\d+)\]/', $path, $matches) !== false) {

    //  reference to the array
    $addr = &$array;

    //  for each key go deeper
    foreach ($matches[1] as $key) {
        $addr = &$addr[$key];
    }

    //  replace the object's value with a new array
    $addr = array(8 => 'New');
    unset($addr);

    var_dump($array);
}

输出是

array(1) {
  [5]=>
  array(1) {
    [6]=>
    array(1) {
      [7]=>
      array(1) {
        [8]=>
        string(3) "New"
      }
    }
  }
}
于 2013-09-25T14:53:21.320 回答