2012-01-17 3 views
0

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

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

$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; 

} 

Функция выше успешно находит «цель», но ссылка не возвращается $ реф вместо $ исх пуст.

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

ответ

0

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

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

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

+0

Аргументы оцениваются перед вызовом функции, поэтому это не проблема, когда аргументы мутируют выражения (действительно, когда они имеют какие-либо побочные эффекты). – outis

+0

Огромное вам спасибо, я полностью забыл об этом. Я в твоем долгу! – Ozonic

Смежные вопросы