>백엔드 개발 >PHP 튜토리얼 >PHP는 메뉴 무한 분류를 실현합니다.

PHP는 메뉴 무한 분류를 실현합니다.

肚皮会动
肚皮会动원래의
2017-11-14 15:03:393948검색

이 글에서는 PHP를 사용하여 메뉴를 구현하는 방법을 자세히 소개합니다.무한 분류일반 항목 메뉴는 사용자 및 역할 로그인에 따라 다르게 표시됩니다. 메뉴를 수정하고 싶은데 매우 번거롭습니다. 가장 좋은 방법은 메뉴를 데이터베이스에 저장한 다음, 데이터베이스에서 메뉴를 검색하고 탐색하여 페이지에 표시하는 것입니다. 이 글의 목적은 데이터를 쿼리하여 메뉴의 상위 및 하위 레벨을 하나씩 일치시키는 방법을 설명하는 것입니다. 무한 분류 기술이 사용됩니다. 메뉴 데이터

여기의 메뉴 데이터는 데이터베이스에서 쿼리 및 처리되지 않습니다. 데이터는 기본적으로 데이터베이스의 데이터와 유사합니다.

$items = array(
            1 => array('id' => 1, 'pid' => 0, 'name' => '安徽省'),
            2 => array('id' => 2, 'pid' => 0, 'name' => '浙江省'),
            3 => array('id' => 3, 'pid' => 1, 'name' => '合肥市'),
            4 => array('id' => 4, 'pid' => 3, 'name' => '长丰县'),
            6 => array('id' => 6, 'pid' => 4, 'name' => '小溪村'),
            5 => array('id' => 5, 'pid' => 1, 'name' => '安庆市'),
        );

여기의 데이터도 마찬가지입니다. 실제 데이터에서 쿼리되도록 변경되었습니다.

메뉴 만들기 Infinitus 분류 방법

   function generateTree($list, $pk = 'id', $pid = 'pid', $child = '_child', $root = 0)
{
    $tree     = array();
    $packData = array();
    foreach ($list as $data) {
        $packData[$data[$pk]] = $data;
    }
    foreach ($packData as $key => $val) {
        if ($val[$pid] == $root) {
//代表跟节点, 重点一
            $tree[] = &$packData[$key];
        } else {
            //找到其父类,重点二
            $packData[$val[$pid]][$child][] = &$packData[$key];
        }
    }
    return $tree;
}

위 코드 분석: 여기서 더 중요한 부분은 코드의

comment

위치, 포커스 1, 포커스 2입니다. 1 . 먼저배열 탐색
2. 루트 메뉴인지 확인하는 것입니다. 그렇다면 루트 메뉴 배열을 가져와서 새 배열에 할당합니다. 4. $child
5 키를 사용하여 하위 클래스 배열을 배열합니다. 최종 결과는 트리 구조의 배열입니다.

결과는 다음과 같습니다.

Array ( 
[0] => Array ( [id] => 1 [pid] => 0 [name] => 安徽省 [son] => Array ( [0] => Array ( [id] => 3 [pid] => 1 [name] => 合肥市 [son] => Array ( [0] => Array ( [id] => 4 [pid] => 3 [name] => 长丰县 [son] => Array ( [0] => Array ( [id] => 6 [pid] => 4 [name] => 小溪村 ) ) ) ) ) 
[1] => Array ( [id] => 5 [pid] => 1 [name] => 安庆市 ) ) )
 [1] => Array ( [id] => 2 [pid] => 0 [name] => 浙江省 ) )

결과를 프런트 엔드로 반환하고 추가합니다.

html 요소

, 메뉴의 효과가 나옵니다 요약

1. PHP를 사용하여 Infinitus를 수행할 때 어려운 점은 &입니다. 여기서는 할당이 아니라 배열에 대한 참조를 할당하는 것입니다.

2. 참조 할당은 일반적으로 배열에서 더 자주 사용됩니다. php $arr=&$arr1, $CustomerTwo=&$Customer와 같은 객체는 메모리에 새로운 공간을 열지 않습니다. , 그러나 메모리에 있는 데이터의 참조를 새 변수에 전달합니다.

3. 이 방법을 사용하는 것이 재귀를 사용하는 것보다 훨씬 낫습니다. 재귀에는 많은 단점이 있습니다. . 인터넷에서 다른 방법을 찾을 수 있습니다. 일부 방법은 사용 후 나타납니다. 예를 들어 다음 기능이 있습니다.

function generateTree($items){
    $tree = array();
    foreach($items as $item){
        if(isset($items[$item['pid']])){
            $items[$item['pid']]['son'][] = &$items[$item['id']];
        }else{
            $tree[] = &$items[$item['id']];
        }
    }
    return $tree;
}
//测试数据
$items = array(
    1 => array('id' => 1, 'pid' => 0, 'name' => '安徽省'),
    2 => array('id' => 2, 'pid' => 0, 'name' => '浙江省'),
    3 => array('id' => 3, 'pid' => 1, 'name' => '合肥市'),
    4 => array('id' => 4, 'pid' => 3, 'name' => '长丰县'),
    7 => array('id' => 6, 'pid' => 4, 'name' => '小溪村'),
    5 => array('id' => 5, 'pid' => 1, 'name' => '安庆市'),
);
이 방법은 실제로 효과를 얻을 수 있으며 매우 효율적인 것 같습니다. 하지만 가장 큰 문제는 id 값이 해당 키 값과 일치해야 한다는 점입니다. 이해하는 친구가 직접 테스트해 보면 도움이 될 것입니다.
관련 권장 사항:

무한 수준 분류의 PHP 재귀 구현을 위한 개발 프로세스 및 샘플 코드

php 무한 수준 분류 예제 코드

php 무한 수준 분류를 달성하는 세 가지 방법

PHP 무제한 레벨 분류 구현 방법 분석

위 내용은 PHP는 메뉴 무한 분류를 실현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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