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

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

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-29 18:34:02160검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

  • 성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.