使用变量名在PHP中访问多维数组

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]"。

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


$foo[53][59][64][65] = new_array() 这段代码会给你什么结果? - Maximus2012
没明白。你的问题是什么?根据你的“路径”获取正确的数组,还是直接替换它? - DontVoteMeDown
问题在于,我需要以编程的方式访问原始数组。该“路径”是从数据库中读取的。因此,我知道变量名为$foo,路径为[53][59][64][65],但我需要用另一个数组$bar替换其内容。 - glutorange
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"
      }
    }
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接