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

时间:2014-11-12 13:33:40

标签: php

我正在尝试设置$ 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);

1 个答案:

答案 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不通过引用分配/返回默认值,因此您始终需要通过添加&运算符来明确地执行此操作。