Php 如何动态访问可变多维数组中的值

Php 如何动态访问可变多维数组中的值,php,multidimensional-array,Php,Multidimensional Array,鉴于上述代码,我如何在$first中定义的索引处将$second中的值设置为$string的内容?这意味着,对于本例,它应该是$first[“b”][“d”][“f”]=$string,但$second和$first的内容可以是任意长度$second始终是一维的。以下是我尝试过的,但似乎没有按计划起作用: $first = array("a", "b" => array("c", "d" => array("e", "f")), "g", "h" => array("f"));

鉴于上述代码,我如何在
$first
中定义的索引处将
$second
中的值设置为
$string
的内容?这意味着,对于本例,它应该是
$first[“b”][“d”][“f”]=$string
,但
$second
$first
的内容可以是任意长度<代码>$second始终是一维的。以下是我尝试过的,但似乎没有按计划起作用:

$first = array("a", "b" => array("c", "d" => array("e", "f")), "g", "h" => array("f"));
$second = array("b", "d", "f");
$string = "foobar";
$key=”“;
$ptr=$first;
对于($i=0;$i
这将执行
$first[“f”]=$string而不是正确的多维索引。我原以为使用
可以找到数组中的位置,包括它已经向下移动的级别

如何动态访问正确的密钥?如果维度的数量是静态的,我可以处理这个问题


编辑:另外,我想要一种不使用
eval

的方法,它比这个要复杂一点。如果还不存在,则必须初始化每个级别。但你的实际问题是:

  • 要向其中添加值的数组位于
    $ptr
    中,而不是
    $first
  • $x&=$y
    $x=$x&$y
    的缩写(按位和)。您需要的是
    x=&$y
    (通过引用分配)
这应该做到:

$key = "";
$ptr = $first;
for($i = 0; $i < count($second); $i++)
{
    $ptr &= $ptr[$second[$i]];
    $key = key($ptr);
}
$first[$key] = $string;
用法:

function assign(&$array, $keys, $value) {
    $last_key = array_pop($keys);
    $tmp = &$array;
    foreach($keys as $key) {
        if(!isset($tmp[$key]) || !is_array($tmp[$key])) {
            $tmp[$key] = array();
        }
        $tmp = &$tmp[$key];
    }
    $tmp[$last_key] = $value;
    unset($tmp);
}

assign($first, $second, $string);