이 글에서는 주로 PHP Infinitus 분류 기능의 구현 방법을 소개합니다. PHP에서 Infinitus 분류를 구현하기 위한 구체적인 아이디어, 구현 코드 및 관련 주의 사항을 예제 형식으로 자세히 분석합니다. 이 기사에서는 PHP에서 무한 분류 기능을 구현하는 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.
프로그램을 개발할 때 때로는 모든 열(1단계 열, 2단계 열, 3단계 열 등 포함)을 가져와서 형식을 지정해야 하는 경우가 있습니다. 부모-자식 관계 구조에 따른 트리. 재귀 또는 참조를 사용할 수 있습니다(PHP의 참조는 C 또는 C++의 포인터와 유사합니다. 즉, 다른 말로 하면 됩니다).
참조를 통한 무한 분류 실현아이디어:
1 즉, 처리할 모든 데이터를 기본 키 ID(pk)를 첨자로 붙인 배열로 패키징하여 pid를 얻을 수 있습니다. 해당 상위 열.
2. 래핑된 데이터를 반복합니다. 루트 노드인 경우 해당 참조를 트리에 추가하고, 그렇지 않으면 해당 참조를 상위 클래스의 하위 요소에 추가합니다. 이러한 방식으로 루트 노드만 트리에 추가되더라도 각 루트 노드에 하위 요소가 있는 경우 하위 요소에 대한 참조가 포함됩니다. 그러므로 나무 모양을 이룰 수 있다.
코드는 다음과 같습니다
/** * 把返回的数据集转换成Tree * @param array $list 要转换的数据集 * @param string $pk 自增字段(栏目id) * @param string $pid parent标记字段 * @return array * @author dqs <1696232133@qq.com> */ function make_tree($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; }
데이터 구조는 다음과 같습니다.
실행 결과는 다음과 같습니다
Array ( [0] => Array ( [id] => 6 [pid] => 0 [title] => 测试1 [url] => test1 [sort] => 0 [create_time] => 1464076199 [update_time] => 1464076199 [status] => 1 [target] => 0 ) [1] => Array ( [id] => 7 [pid] => 0 [title] => 测试2 [url] => test2 [sort] => 0 [create_time] => 1464076218 [update_time] => 1464076218 [status] => 1 [target] => 0 ) [2] => Array ( [id] => 1 [pid] => 0 [title] => 首页 [url] => Index/index [sort] => 1 [create_time] => 1379475111 [update_time] => 1379923177 [status] => 1 [target] => 0 ) [3] => Array ( [id] => 2 [pid] => 0 [title] => 博客 [url] => Article/index?category=blog [sort] => 2 [create_time] => 1379475131 [update_time] => 1379483713 [status] => 1 [target] => 0 [_child] => Array ( [0] => Array ( [id] => 4 [pid] => 2 [title] => 个人博客 [url] => ownblog [sort] => 0 [create_time] => 1464075558 [update_time] => 1464075558 [status] => 1 [target] => 0 [_child] => Array ( [0] => Array ( [id] => 8 [pid] => 4 [title] => 新浪博客 [url] => sinaBlog [sort] => 0 [create_time] => 1464077276 [update_time] => 1464077276 [status] => 1 [target] => 0 ) ) ) [1] => Array ( [id] => 5 [pid] => 2 [title] => 他人博客 [url] => otherBlog [sort] => 0 [create_time] => 1464075582 [update_time] => 1464075582 [status] => 1 [target] => 0 ) ) ) [4] => Array ( [id] => 3 [pid] => 0 [title] => 官网 [url] => http://www.onethink.cn [sort] => 3 [create_time] => 1379475154 [update_time] => 1387163458 [status] => 1 [target] => 0 ) )OneThink의 추가 Infinitus 분류 기능
/** * 把返回的数据集转换成Tree * @param array $list 要转换的数据集 * @param string $pid parent标记字段 * @param string $level level标记字段 * @return array * @author 麦当苗儿 <zuojiazi@vip.qq.com> */ function list_to_tree($list, $pk='id', $pid = 'pid', $child = '_child', $root = 0) { // 创建Tree $tree = array(); if(is_array($list)) { // 创建基于主键的数组引用 $refer = array(); foreach ($list as $key => $data) { $refer[$data[$pk]] =& $list[$key]; } foreach ($list as $key => $data) { // 判断是否存在parent $parentId = $data[$pid]; if ($root == $parentId) { $tree[] =& $list[$key]; }else{ if (isset($refer[$parentId])) { $parent =& $refer[$parentId]; $parent[$child][] =& $list[$key]; } } } } return $tree; }재귀를 통해 무한 분류 구현
아이디어:
1 루프를 사용하여 모든 루트 노드를 별도로 가져옵니다.
2. 각 노드를 얻을 때 원본 데이터에서 노드를 제거하고 원본 데이터가 빌 때까지 모든 하위 노드를 재귀적으로 얻습니다.
코드는 다음과 같이 구현됩니다.
function make_tree1($list,$pk='id',$pid='pid',$child='_child',$root=0){ $tree=array(); foreach($list as $key=> $val){ if($val[$pid]==$root){ //获取当前$pid所有子类 unset($list[$key]); if(! empty($list)){ $child=make_tree1($list,$pk,$pid,$child,$val[$pk]); if(!empty($child)){ $val['_child']=$child; } } $tree[]=$val; } } return $tree; }
효과의 스크린샷은 다음과 같습니다.
위는 이 글의 전체 내용입니다. 모든 분들께 도움이 되기를 바랍니다. 공부하다.
관련 권장 사항:
PHP Judge FORM 데이터 확인 방법 양식 또는 URL 매개변수는 정수_php 팁입니다
위 내용은 PHP에서 무한 분류 기능을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!