【问题标题】:PHP - Searching a multidimensional array and returning a reference to the resultPHP - 搜索多维数组并返回对结果的引用
【发布时间】:2019-06-26 11:31:14
【问题描述】:

我正在尝试编写一个函数,该函数在多维数组中搜索具有特定 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

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

【问题讨论】:

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


    【解决方案1】:

    确实,递归调用也需要“引用赋值”(=&):

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

    它是 PHP 中的其中之一...在函数定义中使用 & 前缀本身是不够的,如 the documentation 所述:

    注意:与参数传递不同,这里你必须在两个地方都使用 & - 表示你想通过引用返回,而不是复制,并表示引用绑定,而不是通常任务,应该完成

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-12
      • 1970-01-01
      • 2014-04-16
      • 1970-01-01
      • 2017-11-16
      • 1970-01-01
      • 1970-01-01
      • 2014-11-11
      相关资源
      最近更新 更多