Функция, которая принимает ссылку на массив, ищет массив и возвращает ссылку на результат поиска?
-
29-10-2019 - |
Вопрос
Мне нужна функция / класс-метод, который находит элемент в массиве (с помощью другого массива, содержащего расположение указанного элемента) и возвращает ссылку на него.
безрезультатно, я пытался сделать это так:
$var = array("foo" => array("bar" => array("bla" => "goal")));
$location = array("foo", "bar", "bla");
...
$ref =& $this->locate($var, $location);
...
private function &locate(&$var, $location) {
if(count($location))
$this->locate($var[array_shift($location)], $location);
else
return $var;
}
.
Вышеуказанная функция успешно находит «цель», но ссылка не возвращается в $ REF, вместо $ ref пустое.
Любая помощь значительно ценится, это серьезно держит меня от завершения моей работы.Спасибо.
Решение
Вам необходимо пройти через результат в стек рекурсии до первого вызова:
private function &locate(&$var, $location) {
if(count($location)) {
$refIndex= array_shift($location);
return $this->locate($var[$refIndex], $location);
} else {
return $var;
}
}
.
и я бы сделал вызов array_shift перед рекурсивным вызовом.Вы знаете, я неловко с функциями вызовов, где параметры меняются в результате вызова.
Не связан с StackOverflow