递归组合数组实现无限极分类

<?php 
namespace Admin\Common;
class Category  
{
	
//组合等级的方法,组合为一维数组,体现缩进
//添加文章的下拉列表
//有点吃内存哦	
/**
 * [forLevel description]
 * @param  [type]  $category [二维数组]
 * @param  string  $html     [缩进字符串]
 * @param  integer $pid      [父级ID]
 * @param  integer $level    [等级]
 * @return [type]            [有联系的二维数组]
 */
public static function forLevel($category,$html="|----",$pid=0,$level=0)

	{
               $arr=array();
            foreach ($category as $v) {
            	
            	 if($v['pid']==$pid){
            	 	$v['level']=$level+1;  //写成两个==
            	 	$v['html']=str_repeat($html, $level);
              	 	$arr[]=$v;
            	 	$arr=array_merge($arr,self::forLevel($category,$html,$v['id'],$level+1));

            	 }
            }
     return $arr;

	}

	

/**
 * [forLayer description]
 * 组合多维数组,用于下拉菜单
 * @param  [type]  $category [description]
 * @param  integer $pid      [description]
 * @return [type]            [description]
 */
public static function forLayer($category,$pid=0)

    {
            $arr=array();
            foreach ($category as $v) {
                
                 if($v['pid']==$pid){

                    $v['child']=self::forLayer($category,$v['id']); //递归是先进后出
                    $arr[]=$v;
                 }
            }
     return $arr;

    }

    



// 面包屑路径,1>2>3
// 传一个子级ID,寻找所有父级ID
/**
 * [pathlink description] 
 * @param  [type] $category [description]
 * @param  [type] $id       [id]
 * @return [type] array         [description]
 */
public static function pathLink($category,$id)

    {
           $arr=array();
            foreach ($category as $v) {
                
                 if($v['id']==$id){
                    $arr[]=$v;
                    // $arr=array_merge($arr,self::pathlink($category,$v['pid']));
                     $arr=array_merge(self::pathlink($category,$v['pid']),$arr);

                 }
            }
     return $arr;

    }
   
// 找子集分类的id 然后in语句找子分类的商品

/**
 * [getChlidsId 获取子级id]
 * @param  [type] $category [description]
 * @param  [type] $pid      [description]
 * @return [type]           [description]
 */
public static function getChlidsId($category,$pid)

    {
            $arr=array(); //static 两种不同的结果
            foreach ($category as $v) {
                
                 if($v['pid']==$pid){

                    $arr[]=$v['id'];

                     $arr=array_merge($arr,self::getChlidsId($category,$v['id']));

                 }
            }

     return $arr;

    }


/**
 * [getChlids 获取子级分类]
 * @param  [type] $category [description]
 * @param  [type] $pid      [description]
 * @return [type]           [description]
 */
public static function getChlids($category,$pid)
    {
            $arr=array(); //static 两种不同的结果
            foreach ($category as $v) {
                
                 if($v['pid']==$pid){

                    $arr[]=$v;

                     $arr=array_merge($arr,self::getChlidsId($category,$v['id']));

                 }
            }

     return $arr;

    }



    
}





 
    // /**
    //  * 递归无限级分类 获取任意节点下所有子类
     
    //  $arrCate 待排序的数组
    //  * @param int
    //  $parent_id 父级节点
    //  * @param int
    //  $level 层级数
    //  * @return array
    //  $arrTree 排序后的数组
    //  */
    // function getMenuTree($arrCat,$parent_id = 0, $level = 0)
    // {
    //     static  $arrTree= array(); //使用static代替global
    //     if( empty($arrCat)) return FALSE;

    //     $level++;

    //     foreach($arrCat as $key=> $value)
    //     {
    //         if($value['parent_id' ]== $parent_id)
    //         {
    //             $value[ 'level']= $level;
    //             $arrTree[] = $value;
    //             unset($arrCat[$key]); //注销当前节点数据,减少已无用的遍历
    //             getMenuTree($arrCat, $value['id'],$level);
    //         }
    //     }
       
    //     return $arrTree;
    // }


    // /**
    //  * 测试数据
    //  */
    // $arrCate = array(  //待排序数组
    //   array( 'id'=>1, 'name' =>'顶级栏目一', 'parent_id'=>0),
    //   array( 'id'=>2, 'name' =>'顶级栏目二', 'parent_id'=>0),
    //   array( 'id'=>3, 'name' =>'顶级栏目三', 'parent_id'=>0),
    //   array( 'id'=>4, 'name' =>'顶级栏目四', 'parent_id'=>0),
    //   array( 'id'=>5, 'name' =>'顶级栏目五', 'parent_id'=>0),
    //   array( 'id'=>6, 'name' =>'顶级栏目六', 'parent_id'=>0),
    //   array( 'id'=>7, 'name' =>'栏目三', 'parent_id'=>1),
    //   array( 'id'=>8, 'name' =>'栏目四', 'parent_id'=>3),
    //   array( 'id'=>9, 'name' =>'栏目五', 'parent_id'=>4),
    //   array( 'id'=>10, 'name' =>'栏目六', 'parent_id'=>2),
    //   array( 'id'=>11, 'name' =>'栏目七', 'parent_id'=>6),
    //   array( 'id'=>12, 'name' =>'栏目八', 'parent_id'=>6),
    //   array( 'id'=>13, 'name' =>'栏目九', 'parent_id'=>7),
    // );
    
    // header('Content-type:text/html;
    //  charset=utf-8'); //设置utf-8编码
    // echo '<pre>';
    // print_r(getMenuTree($arrCate, 0, 0));
    // echo '</pre>';





 ?>

posted @ 2017-06-20 10:01  oneboi  阅读(252)  评论(0)    收藏  举报