>  기사  >  데이터 베이스  >  상위 카테고리가 있는 데이터베이스에서 중첩된 메뉴 트리를 생성하기 위해 재귀를 어떻게 사용할 수 있습니까?

상위 카테고리가 있는 데이터베이스에서 중첩된 메뉴 트리를 생성하기 위해 재귀를 어떻게 사용할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-30 01:41:28135검색

How can recursion be used to generate a nested menu tree from a database with parent categories?

메뉴 트리 생성을 위한 재귀

귀하의 상황에서는 카테고리에 상위 카테고리를 나타내는 '루트' 필드가 있는 데이터베이스 구조가 있습니다. . 원하는 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>';
            $ret .= $this->recurse($categories, $category['id'], $level + 1);
            $ret .= '</li>';
        }
    }
    return $ret . '</ul>';
}</code>

이 함수는 루트 범주에 null 값이 있는 '루트' 필드가 있다고 가정합니다. 카테고리를 반복하고, '루트' 필드를 기준으로 하위 카테고리를 식별하고, 중첩 목록을 사용하여 HTML을 구성합니다.

이 기능을 사용하려면:

  1. 데이터베이스에서 다차원 카테고리 배열.
  2. 범주 배열과 null을 상위 매개변수로 사용하여 재귀 함수를 호출합니다.
  3. 반환된 값을 변수(예: $Tree)에 할당합니다.
  4. $Tree 변수를 에코하여 중첩된 메뉴 트리를 표시합니다.

선택적으로 목록을 생성하기 전에 카테고리에 하위 카테고리가 있는지 확인하여 빈 목록을 방지하도록 함수를 수정할 수 있습니다.

<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>

이 수정된 기능은 카테고리에 하위 항목이 하나 이상 있는 경우에만 목록을 생성합니다.

위 내용은 상위 카테고리가 있는 데이터베이스에서 중첩된 메뉴 트리를 생성하기 위해 재귀를 어떻게 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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