> 데이터 베이스 > MySQL 튜토리얼 > 재귀 없이 PHP/MySQL에서 정렬되지 않은 목록 메뉴 트리를 만드는 방법은 무엇입니까?

재귀 없이 PHP/MySQL에서 정렬되지 않은 목록 메뉴 트리를 만드는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-03 19:24:29
원래의
899명이 탐색했습니다.

How to Build an Unordered List Menu Tree in PHP/MySQL Without Recursion?

PHP/MySQL 순서 없는 목록 메뉴 트리 구성: 비재귀 단일 데이터베이스 쿼리 접근 방식

데이터베이스 쿼리에서 순서 없는 목록 메뉴 트리를 만드는 것은 일반적인 작업. 일반적으로 데이터베이스를 여러 번 쿼리하는 재귀 함수가 사용됩니다. 그러나 단일 데이터베이스 쿼리를 사용하면 보다 효율적인 비재귀적 접근 방식이 가능합니다.

id, title 및 parent_id 속성이 있는 페이지 개체 배열이 주어지면 목표는 다음에 대한 HTML을 생성하는 함수를 만드는 것입니다. 순서가 지정되지 않은 목록 메뉴.

해결책:

우리 솔루션은 다음 단계를 사용합니다.

  1. 도우미 함수 has_children을 생성하여 다음을 결정합니다. 주어진 parent_id에 배열의 하위 항목이 있는 경우.
  2. 페이지 개체를 반복하고 메뉴 목록을 재귀적으로 구성하는 build_menu 함수를 구현합니다.
  3. 초기 상위 ID 0으로 build_menu를 호출하여 메뉴 트리의 루트를 만듭니다.

코드:

<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 = [
  ['id' => 1, 'title' => 'Menu 1', 'parent_id' => null],
  ... // Additional menu objects
];

echo build_menu($menu); // Outputs the complete menu list</code>
로그인 후 복사

장점:

  • 비재귀적 접근 방식으로 스택 오버플로 위험이 제거됩니다.
  • 단일 데이터베이스 쿼리로 효율적인 데이터 검색이 보장됩니다.
  • 모듈식 설계로 유지 관리와 재사용이 용이합니다.

위 내용은 재귀 없이 PHP/MySQL에서 정렬되지 않은 목록 메뉴 트리를 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿