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