>  기사  >  데이터 베이스  >  PHP 및 MySQL을 사용하여 무제한 중첩 메뉴 시스템을 구축하는 방법: 비재귀적 접근 방식?

PHP 및 MySQL을 사용하여 무제한 중첩 메뉴 시스템을 구축하는 방법: 비재귀적 접근 방식?

Linda Hamilton
Linda Hamilton원래의
2024-10-29 18:41:12500검색

How to Build a Limitless Nested Menu System with PHP and MySQL: A Non-Recursive Approach?

PHP 및 MySQL에서 무제한 중첩 메뉴를 표시하는 방법

문제 설명

중첩 메뉴 시스템에서 각 메뉴 항목은 하위 메뉴 항목을 가질 수 있습니다. , 이는 차례로 자체 하위 항목을 가질 수 있습니다. 목표는 데이터베이스에서 이러한 중첩된 메뉴 레벨을 효과적으로 가져와 표시하는 것입니다.

코드 구현

이를 달성하기 위해 다음과 같은 비재귀적 접근 방식을 사용할 수 있습니다. :

  • 데이터베이스 쿼리: menu_item 테이블을 쿼리하여 상위 및 위치별로 결과를 정렬합니다.
  • 다차원 배열 : 검색된 메뉴 항목을 다차원 배열로 구성합니다. 여기서 각 요소는 부모-자식 관계를 나타냅니다.
  • 트리 탐색: 루프를 사용하여 이 배열을 탐색합니다.
  • HTML 생성: 중첩된 메뉴에 대한 HTML 구조를 동적으로 생성합니다.

PHP 함수

다음은 위의 접근 방식을 보여주는 PHP 함수입니다.

<code class="php">function generateMenu($items) {
    $html = '';
    $parent = 0;
    $parentStack = array();

    $children = array();
    foreach ($items as $item) {
        $children[$item['parent_id']][] = $item;
    }

    while (($option = each($children[$parent])) || ($parent > 0)) {
        if (!empty($option)) {
            // 1) Item with children
            if (!empty($children[$option['value']['id']])) {
                $html .= '<li>' . $option['value']['title'] . '</li>';
                $html .= '<ul>';
                array_push($parentStack, $parent);
                $parent = $option['value']['id'];
            }
            // 2) Item without children
            else {
                $html .= '<li>' . $option['value']['title'] . '</li>';
            }
        }
        // 3) Current parent has no more children
        else {
            $html .= '</ul>';
            $parent = array_pop($parentStack);
        }
    }

    return $html;
}</code>

사용법

함수를 사용하려면 먼저 데이터베이스에서 메뉴 항목을 검색하고 이를 generateMenu() 함수에 배열로 전달합니다. 결과 HTML은 계층적 메뉴 구조를 나타내는 일련의 중첩되고 정렬되지 않은 목록이 됩니다.

비재귀적 접근 방식의 이점

이 비재귀적 접근 방식은 다음 작업에서 발생할 수 있는 무한 루프의 위험을 제거합니다. 재귀를 사용하여 중첩된 메뉴를 생성하는 데 더욱 안정적이고 효율적인 솔루션이 됩니다.

위 내용은 PHP 및 MySQL을 사용하여 무제한 중첩 메뉴 시스템을 구축하는 방법: 비재귀적 접근 방식?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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