PHP와 MySQL을 사용하여 메뉴 트리를 구축하려면 데이터베이스에서 메뉴 항목의 계층적 목록을 표시해야 합니다. 이 문서에서는 재귀나 데이터베이스에 여러 번 도달하지 않고 이를 달성하는 방법에 대한 사용자의 질문을 다룹니다.
데이터 구조:
제공된 예는 각 개체에는 ID, 제목 및 parent_id가 있는 데이터베이스입니다. null의 parent_id는 루트 수준 메뉴 항목을 나타냅니다.
<code class="php">page object id title parent_id</code>
해결책:
권장되는 접근 방식은 다음을 보장하기 위해 데이터베이스에서 메뉴 항목을 미리 정렬하는 것입니다. 원하는 순서. 데이터베이스 스키마에 가중치 또는 시퀀스 열을 추가하고 해당 열을 기준으로 쿼리 결과를 정렬하면 됩니다.
<code class="php">function has_children($rows,$id) { foreach ($rows as $row) { if ($row['parent_id'] == $id) return true; } return false; } function build_menu($rows,$parent=0) { $result = "<ul>"; foreach ($rows as $row) { if ($row['parent_id'] == $parent){ $result.= "<li>{$row['title']}"; if (has_children($rows,$row['id'])) $result.= build_menu($rows,$row['id']); $result.= "</li>"; } } $result.= "</ul>"; return $result; }</code>
출력 예:
제공된 메뉴 항목:
<code class="php">$menu = array( array('id'=>1,'title'=>'Menu 1', 'parent_id'=>null), array('id'=>2,'title'=>'Sub 1.1', 'parent_id'=>1), array('id'=>3,'title'=>'Sub 1.2', 'parent_id'=>1), array('id'=>4,'title'=>'Sub 1.3', 'parent_id'=>1), array('id'=>5,'title'=>'Menu 2', 'parent_id'=>null), array('id'=>6,'title'=>'Sub 2.1', 'parent_id'=>5), array('id'=>7,'title'=>'Sub Sub 2.1.1', 'parent_id'=>6), array('id'=>8,'title'=>'Sub 2.2', 'parent_id'=>5), array('id'=>9,'title'=>'Menu 3', 'parent_id'=>null), );</code>
build_menu($menu)를 호출하면 다음 HTML 출력이 생성됩니다.
<code class="html"><ul> <li>Menu 1 <ul> <li>Sub 1.1</li> <li>Sub 1.2</li> <li>Sub 1.3</li> </ul> <li>Menu 2 <ul> <li>Sub 2.1 <ul> <li>Sub Sub 2.1.1</li> </ul> <li>Sub 2.2</li> </ul> <li>Menu 3</li> </ul></code>
위 내용은 재귀 또는 다중 데이터베이스 쿼리 없이 PHP에서 트리 구조 메뉴를 구축하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!