Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-搜索多维数组并返回对结果的引用_Php_Recursion_Multidimensional Array_Pass By Reference - Fatal编程技术网

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

PHP-搜索多维数组并返回对结果的引用,php,recursion,multidimensional-array,pass-by-reference,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"]) &am

我试图编写一个函数,在多维数组中搜索具有特定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的工作原理与预期一致,因此我想知道是否是递归没有像我预期的那样工作。

实际上,递归调用还需要“引用赋值”(
=&
):

这是PHP中的一个东西。。。仅在函数定义中使用
&
前缀是不够的,如中所述:

注意:与参数传递不同,这里您必须在两个位置使用&来指示您希望通过引用而不是副本返回,并指示应该进行引用绑定,而不是通常的赋值

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