PHP-搜索多维数组并返回对结果的引用

时间:2019-02-01 21:01:35

标签: php recursion multidimensional-array pass-by-reference

我正在尝试编写一个函数,该函数在多维数组中搜索具有特定ID的数组,然后返回对该找到的数组的引用。 我已经提出来了,但是它没有按预期工作。

$list = array(
    "id"=>"123",
    "items"=>array(
        "id"=>"456"
    )
);

function &getArrayById(&$array, $id) {

    //Found
    if(isset($array["id"]) && $array["id"] == $id) {
        return $array;
    }

    //Not found, looking for nested array
    foreach(array_keys($array) as $key) {

        if (gettype($array[$key]) === "array") {

            $o = getArrayById($array[$key], $id);

            if(gettype($o) != "NULL") {
                return $o;
            }

        }

    }

    //Not found - end
    return null;
}


$a =& getArrayById($list, "456");
$a["id"] = "ID EDITED";
echo $list["items"]["id"]; //"456" - not "ID EDITED" like I want

我注意到的一件事是,当我使用ID 123(即数组的最顶层)进行搜索时,尝试使用$ a编辑返回的数组ID可以按预期方式工作,所以我想知道它是否是递归无法正常工作。

1 个答案:

答案 0 :(得分:1)

实际上,递归调用还需要“按引用分配”(=&):

$o =& getArrayById($array[$key], $id);

这是PHP中的事情之一……仅凭the documentation中的陈述,在函数定义中加上&前缀是不够的:

  

注意:与参数传递不同,在这里您必须在两个地方都使用&-表示要按引用返回,而不是副本,并表示引用绑定,而不是通常分配,应该完成