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);