Я пытаюсь написать функцию, которая ищет в многомерном массиве массив с определенным идентификатором, а затем возвращает ссылку на этот найденный массив.Я придумал это, но он работает не так, как я ожидал.
$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 (т. Е. Самого верхнего уровня массива),Попытка отредактировать идентификатор возвращаемого массива с помощью $ a работает, как и ожидалось, поэтому мне интересно, не рекурсивная ли она работает не так, как я ожидаю.