我在这里尝试设置$map的第一个子元素的值。我需要通过引用数组的路径来做到这一点,即[0]['child']。
如果设置了该函数,则返回路径值ok,但我在更改该元素的值时遇到问题。所以在这种情况下,我希望$map[0]['child']等于"new"。
function getArrayPath($arr,$path) {
foreach($path as $item){
$arr = $arr[$item];
}
return $arr;
}
$map='[{"child":""},{"child":""},{"child":""}]';
$map=json_decode($map,true);
$path = array("0","child");
$target = getArrayPath($map,$path);
if($target==""){
$target="new";
}
var_dump($map);
您可以通过使用引用来解决此问题:
function &getArrayPath(&$arr,$path) {
// ^--return ^--receive
// reference reference
foreach($path as $item){
$arr =& $arr[$item];
// ^--assign reference
}
return $arr;
}
$map = json_decode('[{"child":"1"},{"child":"2"},{"child":"3"}]', true);
$path = array("0","child");
$target =& getArrayPath($map,$path);
// ^--assign reference
正如您在这个演示中看到的(您的代码略有更改)。
由于PHP默认情况下不通过引用进行赋值/返回,因此您总是需要通过添加&
运算符来显式地执行此操作。