Функция, которая принимает ссылку на массив, ищет массив и возвращает ссылку на результат поиска?

StackOverflow https://stackoverflow.com/questions/8894219

Вопрос

Мне нужна функция / класс-метод, который находит элемент в массиве (с помощью другого массива, содержащего расположение указанного элемента) и возвращает ссылку на него.

безрезультатно, я пытался сделать это так:

$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 перед рекурсивным вызовом.Вы знаете, я неловко с функциями вызовов, где параметры меняются в результате вызова.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top