Функция, которая принимает ссылку на массив, ищет массив и возвращает ссылку на результат поиска? - PullRequest
0 голосов
/ 17 января 2012

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

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

$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 пуст.

Любая помощь очень ценится, это серьезно мешает мне завершить мою работу. Спасибо.

1 Ответ

0 голосов
/ 17 января 2012

Вам нужно передать результат в стек рекурсии первому вызову:

private function &locate(&$var, $location) {
    if(count($location)) {
        $refIndex= array_shift($location);
        return $this->locate($var[$refIndex], $location);
    } else {
        return $var;
    }
}

И я бы сделал вызов array_shift перед рекурсивным вызовом.Знаете, меня беспокоят вызовы функций, когда параметры изменяются в вызове.

...