我正在尝试设置$ 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);
答案 0 :(得分:3)
您可以使用references:
解决此问题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
正如您在this demo中看到的那样(您的代码略有变化)。
由于PHP不通过引用分配/返回默认值,因此您始终需要通过添加&
运算符来明确地执行此操作。