有时候我们会有这样的需求。将一张无限级分类表,处理好层级关系
例如,选择选择部门的上级关系
例如,选择选择部门的上级关系
表数据格式。pid 0 为顶级
id pid name
1 0 行政
2 1 主管
3 0 人事
4 3 经理
5 4 员工
转换格式为以下格式,普通现实方法为,使用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;
}