作为程序员一定要保持良好的睡眠,才能好编程

php递归的写法工具类

发布时间:2016-10-11

//递归 nav 得到option的列表
public static function navList($nav,$pid=0,$step=0,$_str="    "){
    $_newArr=[];
    if(is_array($nav)){
        foreach($nav as $key=>$val){
            if($val['pid']==$pid){
                $val['step']=$step;
                $val['_str']=str_repeat($_str,$val['step']);
                $_newArr[]=$val;
                $_newArr=array_merge($_newArr,self::navList($nav,$val['id'],$step+1,$_str));
            }
        }
    }else if(is_object($nav)){
        foreach($nav as $key=>$val){
            if($val->pid==$pid){
                $val->step=$step;
                $val->_str=str_repeat($_str,$val->step);
                $_newArr[]=$val;
                $_newArr=array_merge($_newArr,self::navList($nav,$val->id,$step+1,$_str));
            }
        }
    }
    return $_newArr;
}


//递归,把他的子类放在sun中,或指定到的一个变量中
public static function navList_sun($nav,$pid=0,$varSun="sun"){
    $_newArr=[];
    if(is_array($nav)){
        foreach($nav as $key=>$val){
            if($val['pid']==$pid){
                $val[$varSun]=self::navList_sun($nav,$val['id'],$varSun);
                $_newArr[]=$val;
            }
        }
    }else if(is_object($nav)){
        foreach($nav as $key=>$val){
            if($val->pid==$pid){
                $val->$varSun=self::navList_sun($nav,$val->id,$varSun);
                $_newArr[]=$val;
            }
        }
    }
    return $_newArr;
}

//获取此类下所有的id,并以数组的形式返回
public static function navList_getSunIds($nav,$pid){
    $_newArr=[];
    if(is_array($nav)){
        foreach($nav as $key=>$val){
            if($val['pid']==$pid){
                $_newArr[]=$val['id'];
                $_newArr=array_merge($_newArr,self::navList_getSunIds($nav,$val['id']));
            }
        }
    }else if(is_object($nav)){
        foreach($nav as $key=>$val){
            if($val->pid==$pid){
                 $_newArr[]=$val->id;
                $_newArr=array_merge($_newArr,self::navList_getSunIds($nav,$val->id));
            }
        }
    }
    return $_newArr;
}


直接复制这些代码放在项目中,即可使用,