PHP通过动态路径设置数组值


PHP setting array value through dynamic path

我在这里尝试设置$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默认情况下不通过引用进行赋值/返回,因此您总是需要通过添加&运算符来显式地执行此操作。