2012-07-19 3 views
0

재귀 함수를 사용하여 트리에서 내 메뉴를 변환하고 있습니다. 나는 데이터베이스에서 가져온 배열은 :이 기능에 위에서 언급 한 배열을 전달하여 재귀 함수를 호출하고CodeIgniter에서 재귀 함수가 실패했습니다.

array ( 
    [0] => stdClass Object ( 
    [nav_group_id] => 1 
    [entity_id] => 1 
    [parent] => 0 
    [name] => Meter Reading 
    [link] => #) 
    [1] => stdClass Object ( 
    [nav_group_id] => 1 
    [entity_id] => 2 
    [parent] => 0 
    [name] => Parameterization 
    [link] => #) 
    [2] => stdClass Object ( 
    [nav_group_id] => 1 
    [entity_id] => 3 
    [parent] => 0 
    [name] => View Reports 
    [link] => #) 
    [3] => stdClass Object ( 
    [nav_group_id] => 1 
    [entity_id] => 4 
    [parent] => 0 
    [name] => Management & Control 
    [link] => #) 
    [4] => stdClass Object ( 
    [nav_group_id] => 1 
    [entity_id] => 5 
    [parent] => 1 
    [name] => Billing Data 
    [link] => #) 
    [5] => stdClass Object ( 
    [nav_group_id] => 1 
    [entity_id] => 6 
    [parent] => 1 
    [name] => MDI Billing Data 
    [link] => #) 

: 이제

$this->parseAndPrintTree('0',$navigation_all); 
//die(); (issue here) 

을 나는이 기능 후에 die();를 사용하는 경우는 표시 올바른 메뉴 및 die();를 사용하지 않을 경우 페이지가로드에 실패하고이 오류 제공 :

Content Encoding Error The page you are trying to view cannot be shown because it uses an invalid or unsupported form of compression."

을 ... 더 출력을 보여줍니다. 여기에 내 재귀 함수가있다 :

function parseAndPrintTree($root, $tree) 
{ 
    $return = array(); 
    if(!is_null($tree) && count($tree) > 0) 
    { 
     echo '<ul>'; 
     foreach($tree as $child => $parent) 
     { 
      if($parent->parent == $root) 
      {      
       unset($tree[$child]); 
       echo '<li>'.$parent->name; 
       $this->parseAndPrintTree($parent->entity_id, $tree); 
       echo '</li>'; 
      } 
     } 
     echo '</ul>'; 
    } 
} 
+0

함수 뒤에'die();'를 붙이는 "수정"은 문제가 무엇인지 결정적이지 않습니다. 즉, 오류가 실제로 재귀 함수에서 발생한다는 보장이 없습니다. – nickb

+0

@nickb하지만 내 코드가 명확하다. 문제가 있으면 아무 문제가 없다고 지적 해주세요. 무한 재귀가 일어나고 있다고 생각하지 않습니다. –

+0

@nickb하지만 코드에 문제가 있으면 제 코드가 명확합니다. .. 나는 무한 재귀가 일어나고 있다고 생각하지 않는다 ... 또한 코드를 잘 사용하지 않으면 재귀 함수에 있다고 확신한다. –

답변

0

나는이 질문에 답을 게시 할 것이다.

gzip 압축을 사용하는 경우 압축 기능이 출력되기 전에 브라우저에 아무 것도 출력 할 수 없습니다. Codeigniter는 실행 스택의 끝 부분에서 자동으로 수행합니다. 재귀 함수에서이 출력을 처리하는 메아리가 있습니다.

이 문제를 해결하는 가장 좋은 방법은이 함수를 helper 함수로 변환 한 다음이 함수를 호출 할 때 컨트롤러 또는 라이브러리가 아닌 현재 뷰 파일에 넣는 것입니다.

+0

내가 트리 출력을 사용하는 대신 echo를 사용하는 대신 변수를 사용했습니다. $ arraged. = 'ul'etc etc 그러나 동일한 오류 출력이 발생합니다. –

+0

그런 다음 해당 변수를 뷰에 전달하여 해당 변수를 반향 시키시겠습니까? –

+0

그래, 나는 같은 일을 .....하고있다. 하지만이 변수의 형식을 지정하는 방법을 도와주세요. –

0

후회를 위해 Firefox의 코드 2.1.0에서 작업하는 동안이 오류 메시지가 나타나고 여기에 착륙했습니다. 내 문제는 내 코드에 하위보기에서 생성 된 오류나 경고가 있다는 것입니다. 내 /application/config/config.php 파일이 줄

$config['compress_output'] = TRUE; 

있었기 때문에 나는 질문의 저자와 같은 오류 메시지를 받았습니다. 난 내가 처리 된 실제 오류를 볼 수 있었다, 그리고 그 라인

$config['compress_output'] = FALSE; 

을 변경했습니다. 희망이 사람을 돕는다!