재귀 PHP 함수를 사용하여 MySQL 데이터베이스에 저장된 계층적 데이터에서 HTML 메뉴 트리를 효율적으로 생성하려면 어떻게 해야 합니까?

Mary-Kate Olsen
풀어 주다: 2024-10-29 18:34:02
원래의
214명이 탐색했습니다.

How can I efficiently generate an HTML menu tree from hierarchical data stored in a MySQL database using a recursive PHP function?

재귀 기능이 있는 메뉴 트리 반향

다양한 루트 아래에 계층적 데이터가 구성된 MySQL 데이터베이스가 있는 시나리오에서 다음과 같은 문제가 발생할 수 있습니다. 이 구조를 복제하는 HTML 메뉴 트리를 생성해야 합니다. 여기에는 루트 카테고리와 해당 하위 카테고리를 재귀적으로 표시하는 작업이 포함됩니다.

이를 달성하기 위해 재귀적인 PHP 함수를 사용하여 데이터베이스 레코드를 탐색하고 HTML 마크업을 구성할 수 있습니다. 이 함수에는 카테고리 데이터가 필요하며 선택적으로 상위 식별자 및 깊이 수준이 필요합니다.

이 함수는 카테고리를 반복하여 지정된 상위와 일치하는 요소를 검색합니다. 일치하는 항목이 발견되면

  • 카테고리 이름을 포함하는 앵커 태그가 있는 요소입니다. 그런 다음 하위 카테고리가 있는 경우 이를 가져오고 추가하기 위해 자신을 재귀적으로 호출합니다. 이 프로세스는 계층 구조의 모든 수준을 통과할 때까지 계속됩니다.

    다음 수정된 PHP 함수는 빈

      하위 카테고리가 없을 때 요소가 표시되지 않도록 합니다.

      <code class="php">function recurse($categories, $parent = null, $level = 0) {
        $ret = '<ul>';
        foreach ($categories as $index => $category) {
          if ($category['root'] == $parent) {
            $ret .= '<li><a href="#"><p class="Tier' . $level . '">' . $category['name'] . '</p></a>';
            $sub = $this->recurse($categories, $category['id'], $level + 1);
            if ($sub != '<ul></ul>') {
              $ret .= $sub;
            }
            $ret .= '</li>';
          }
        }
        return $ret . '</ul>';
      }</code>
      로그인 후 복사

      성능을 향상하려면 각 카테고리의 하위 카테고리 수를 나타내는 필드를 포함하도록 데이터베이스를 쿼리하는 것이 좋습니다. 이 정보를 활용하여 하위 카테고리를 재귀적으로 순회할지 여부를 결정할 수 있습니다.

      <code class="php">select Category.*, (select count(distinct c1.id) from Category as c1 where c1.root = Category.id) as ChildCount from Category</code>
      로그인 후 복사

      이 개선 사항을 통해 그에 따라 재귀 기능을 수정할 수 있습니다.

      <code class="php">function recurse($categories, $parent = null, $level = 0) {
        $ret = '<ul>';
        foreach ($categories as $index => $category) {
          if ($category['root'] == $parent) {
            $ret .= '<li><a href="#"><p class="Tier' . $level . '">' . $category['name'] . '</p></a>';
            if ($category['ChildCount'] > 0) {
              $ret .= $this->recurse($categories, $category['id'], $level + 1);
            }
            $ret .= '</li>';
          }
        }
        return $ret . '</ul>';
      }</code>
      로그인 후 복사

      위 내용은 재귀 PHP 함수를 사용하여 MySQL 데이터베이스에 저장된 계층적 데이터에서 HTML 메뉴 트리를 효율적으로 생성하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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