2012-01-17 4 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