递归遍历无限级分类

有时候我们会有这样的需求。将一张无限级分类表,处理好层级关系
例如,选择选择部门的上级关系
表数据格式。pid 0 为顶级

idpidname 10行政 21主管 30人事 43经理 54员工

【递归遍历无限级分类】转换格式为以下格式,普通现实方法为,使用sql一层层去查找。
我们可以一次把所有数据拿出来,然后递归现实

行政 |----主管 人事 |----经理 |----|----员工



代码实现方法

/** * 无限极分类处理成一个数组 * @param array $catArray 操作数组 * @param$id 父ID的值 * @param$pid 父ID的key * @param$prefix 用于数组排列前的前缀 * @return miultitype:number */ public function sortdata($catArray, $id = 0 , $pid='pid', $prefix = '|----') { static $formatCat = array(); static $floor= 0; //循环数组 foreach($catArray as $key => $val) { if($val[$pid] == $id) { //根据循环的次数得到数组值得前缀 $str = $this->nstr($prefix,$floor); $val['name'] = $str.$val['name']; $val['floor'] = $floor; $formatCat[]= $val; unset($catArray[$key]); $floor++; $this->sortdata($catArray, $val['id'] ,$prefix ); $floor--; } } return $formatCat; } /** * 获得数组前缀 * @param unknown $str * @param number $num */public function nstr($str,$num=0) { $return = ''; for($i=0; $i<$num; $i++) { $return .= $str; } return $return; }




    推荐阅读