2013-08-26 2 views
0

기능은 간단하다계층 적 메뉴에서 이상한 동작이 발생합니까?

function showMenu($level = 0) { 

    $sql = "SELECT * FROM `menus` WHERE `submenu`=".$level; 

    $result = mysql_query($sql); 

    echo "<ul>"; 

     while ($node = mysql_fetch_array($result)) { 

      echo "<li>". $node['name']; 

      $sql_ = "SELECT * FROM `menus` WHERE `submenu`=".$node['id']; 

      $hasChild = mysql_fetch_array(mysql_query($sql_)) != null; 

      if ($hasChild) { 

       showMenu($node['id']); 

      } 

      echo "</li>"; 

     } 

    echo "</ul>"; 

} 

하지만를 통해 레벨 1을 사용하거나하고있어 결과가 이상하다. 예 :

showMenu(1); 

은 첫 번째 항목을 제외하고 모든 항목을 반환합니다.

+0

mg. 그 기능을 작성 했습니까? – JohnnyJS

+0

아니, stackoverflow에 있었지만, 난 기억이 안나요. 나는 그것이 시간이 없다는 것을 알고있다. (PDO 등으로 인해), 흥미 롭다. – Smash

답변

2
function showMenu($level = 0) { 

    $sql = "SELECT * FROM `menus` WHERE `submenu`=".$level; 

    $result = mysql_query($sql); 

    echo "<ul>"; 
     $rows = ""; 
     while ($node = mysql_fetch_array($result)) { 

      echo "<li>". $node['name']; 

      $sql_ = "SELECT * FROM `menus` WHERE `submenu`=".$node['id']; 

      $execute = mysql_query($sql_); 

      $rows = mysql_num_rows($execute); 
      if ($rows>0) { 

       showMenu($node['id']); 

      } 

      echo "</li>"; 

     } 

    echo "</ul>"; 

} 
+0

그 아주 좋은,하지만 재귀 함수, 여러 패킷, 나는 그것을 권하고 싶지 않아요. – JohnnyJS

+0

나는 여전히 혼란 스럽다. 레벨 = 0 인 첫 번째 요소가 빠져있다. – Smash

+0

그냥 ($ level == 0) {$ sql = "SELECT * FROM'메뉴'WHERE'하위 메뉴 = '0'";} else { "SELECT * FROM'메뉴'WHERE'하위 메뉴 = . $ level;} – Prasannjit

0

먼저 훌륭한 코드 작성기는 코드를 복사하여 붙여 넣지 않습니다. 그것의 실패를 의미합니다.

내 생각에는 왜 당신은 모든 메뉴 (하위 메뉴 포함)를 가져야 만하는지. 더 나은 방법은, 그 때문에 당신은 단지 하나의 패킷을 보내는 SQL.

이제 개체에 모든 메뉴가 있습니다. (헤이, 우리는 2013 년 : 사용 객체 지향 mysqli) 간단한 if 때마다 확인하실 수 있습니다 새로운 <ul> 태그를 구축하는 날씨.

희망이 있습니다.

관련 문제