>  기사  >  백엔드 개발  >  PHP Infinitus 분류 예제에 대한 자세한 설명

PHP Infinitus 분류 예제에 대한 자세한 설명

小云云
小云云원래의
2018-03-31 14:28:521821검색

저희 작업에는 무한 분류의 응용이 많이 있습니다. 사실 아이디어는 단지 재귀적 사고를 사용하여 자신을 호출하는 것뿐입니다. 제가 작성한 무한 분류 기능을 살펴보겠습니다:

header("content-type:text/html;charset=utf-8");

//测试数组
$arr=array
(
    array('id'=>2,'name'=>'分类2','parent_id'=>1),
    array('id'=>9,'name'=>'分类9','parent_id'=>8),
    array('id'=>1,'name'=>'分类1','parent_id'=>0),
    array('id'=>7,'name'=>'分类7','parent_id'=>0),
    array('id'=>3,'name'=>'分类3','parent_id'=>2),
    array('id'=>4,'name'=>'分类4','parent_id'=>0),
    array('id'=>6,'name'=>'分类6','parent_id'=>5),
    array('id'=>8,'name'=>'分类8','parent_id'=>7),
    array('id'=>5,'name'=>'分类5','parent_id'=>4)
);
/**
 * 已知子类id 得到父类树形结构
 * @param  [type]  $data    [要查询的数组]
 * @param  [type]  $id      [子类id]
 * @param  integer $level   [缩进系数]
 * @param  boolean $isClear [调用时为true,多次调用不相互叠加]
 * @return [type]           [返回结果树形结构]
 */
function getParent($data,$id,$level=0,$is_Clear=false){
    static $_rec = array();
    if ($is_Clear == true) {
        $_rec = array();
    }
    foreach ($data as $k=>$v) {
        if ( $v['id'] == $id) {
        $_rec[] =$v;  
                // if ($v['parent_id'] != 0) {
                getParent($data,$v['parent_id']);
            // }
        }
    }
     $rec = array_reverse($_rec);
     for ($i=0; $i
     $rec[$i]['level']=$level;
     $level++;
     }
     //把自己拿出来,自己不属于父类
     array_pop($rec);
     return $rec;
}
/**
 * 已知父类id找  得到子类树形结构
 * @param  [type]  $data    [要查询的数组]
 * @param  [type]  $id      [父类id]
 * @param  integer $level   [缩进系数]
 * @param  boolean $isClear [调用时为true,多次调用不相互叠加]
 * @return [type]           [返回结果树形结构]
 */
function getChilds($data,$id,$level=0,$isClear=false){
    static $rec = [];
    if ($isClear == true) {
        $rec =[];
    }
    foreach ($data as $k => $v) {
        if ($v['parent_id'] == $id) {
            $v['level']=$level;
            $rec[] =$v;
            getChilds($data,$v['id'],++$level);
        }
    }
    return $rec;
}
/**
 * 已知父类id,得到子类id树形结构;区别在于$row[]=$v['id'],只赋值id;
 * getParent(),可改写成getParentid();
 * @param  [type]  $data [description]
 * @param  [type]  $id   [description]
 * @param  boolean $col  [description]
 * @return [type]        [description]
 */
   function getChildsId($data,$id,$col=false){
       static $row=array();
       if($col)
           $row=array();
           foreach ($data as $k => $v) {
               if($v['parent_id'] ==$id){
                   $row[]=$v['id'];
                   getChildsId($data,$v['id']);
               }
           }
       return $row;
   }
/**
 * 已知父类id,得到树形结构;
 * 结合getParent(),若不弹出自己,即已知子类id,得到树形结构
 * @param  [type]  $data      [description]
 * @param  [type]  $parent_id [description]
 * @param  integer $level     [description]
 * @param  boolean $col       [description]
 * @return [type]             [description]
 */
function tree($data,$parent_id,$level=0,$col=false){
    static $res=array();
        if($col) $res=array();
    foreach ($data as $k => $v) {
        if($v['parent_id'] == $parent_id){
            $v['level']=$level;
            $res[]=$v;
            tree($data,$v['id'],$level+1);
        }
    }
     return $res;
}

관련 추천:

php 무한 분류 상세 설명

Infinitus 분류 트리 구조를 만드는 방법

PHP는 Infinitus 분류 메뉴를 구현합니다

위 내용은 PHP Infinitus 분류 예제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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