2010-08-14 3 views
5

두 시간 동안 머리를 긁고 인터넷 검색을 한 후 - 막혔습니다!PHP - 재귀 함수에서 배열을 반환 할 때 오류가 발생했습니다.

제목에 따라 루프가 끝날 때까지 빌드 된 배열을 반환하려고합니다. 다른 경우에만 배열 변수를 반환하지만 공동 작업은 수행하지 않습니다. 단순히 함수에서 공백으로 반환하지만, 다른 경우에는 print_r 및 예상대로 표시 할 수 있습니다. 단지 $ open_array 변수에 배열을 반환하지 않습니다. 어떤 아이디어 (또는 남용)가 대단히 감사하게 될 것입니다!

+0

내가 볼 수없는'$ other_variable'은 함수의 범위에서 정의된다. – NullUserException

+0

또한'[$ val-> id']에는 유효한 구문이 없습니다. 이것도 실행됩니까? – NullUserException

+0

무엇? 배열을 만들 때 재귀를 사용하지 않습니까? 너 무슨 행성이야? –

답변

3

"then"부분에서 $ open에 할당하지만 결코 그 값을 반환하지 않습니다. 따라서 else 부분을 입력하는 경우를 제외하고는 무언가를 되돌릴 수는 없지만 그 다음은 변경되지 않은 버전입니다.

그래서 내가 할 수있는 일은 다음과 같습니다. $ open을 반납하지 않고 버전을 만들었습니다. 함수를 호출하기 전에 $ open을 초기화하십시오. 전달하십시오. 그런 다음 필요하면 수정하십시오.

어쨌든 참조로 전달하기 때문에 실제로이 $ open 값을 반환 할 이유가 없습니다. 즉, 항상 조작중인 것과 동일한 객체 여야합니다. (그런 경우에는 그렇지 않습니다. 아마도 버그).

이렇게하면 호출 및 반환과 함께 흐름 논리에 집중할 수 있으며 항상 동일한 데이터 구조를 사용해야합니다.

갱신

function find_parent($number, $open = false) { 
    if(isset($other_variable[$number])) { 
     foreach($other_variable[$number] as $val) { 
      $open[$val->id] = [$val->id; 
      $open = find_parent([$val->id, $open); 
      return $open; // INSERTED 
     } 
    } 
    else { 
    return $open; 
    } 
} 
+0

나는 당신의 코멘트를 이해합니다. :). 하지만 아직까지는 print_r ($ open)을 배열 내부에 인쇄 할 수 있다는 생각이 들지 않습니다. 예상대로 배열을 반환하지만 반환 할 수는 없습니까? – Hayden

+0

"then"부분에도 반환하십시오 (업데이트 참조). 그렇지 않으면 "then"부분에 값이 설정되어 재귀 호출에 올바르게 전달되므로 "else"부분에도 표시되지만 이전 호출의 "if"부분이 반환되면 반환되지 않습니다. – Nicolas78

+0

치료를 한 빙고. 고맙습니다! – Hayden

관련 문제