使用变量名称在PHP中处理多维数组

时间:2013-09-25 14:39:26

标签: php arrays variables

我一直在搜索几个小时,阅读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]”。

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

1 个答案:

答案 0 :(得分: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"
      }
    }
  }
}