先查询pid为0的,遍历这些pid为0的,查询pid为这些item的id的,然后循环输出
如果是oracle,可以用level(),sys_connect_by_path()函数实现不使用函数的话,可以建视图实现。
这一参考我这个方法,使用递推来遍历,只要是处理数据结构的都有方法的,只在于效率的高低
static public function toLevel($cate, $delimiter = '|——', $parent_id = 0, $level = 0) { $arr = array(); foreach ($cate as $v) { if ($v['parent_id'] == $parent_id) { $v['type'] = $level + 1; $v['delimiter'] = str_repeat($delimiter, $level); $arr[] = $v; $arr = array_merge($arr, self::toLevel($cate, $delimiter, $v['cate_id'], $v['type'])); } } return $arr; }
查询好数据使用函数调取,第一个完美支持你的需求,第二个是数据递归存放
$arr = [ 0=>['id'=>1,'pid'=>0,'title'=>'标题名称一'], 1=>['id'=>2,'pid'=>0,'title'=>'标题名称一'], 2=>['id'=>3,'pid'=>1,'title'=>'标题名称一'], 3=>['id'=>4,'pid'=>1,'title'=>'标题名称一'], 4=>['id'=>5,'pid'=>2,'title'=>'标题名称一'], 5=>['id'=>6,'pid'=>2,'title'=>'标题名称一'], 6=>['id'=>7,'pid'=>3,'title'=>'标题名称一'], 7=>['id'=>8,'pid'=>3,'title'=>'标题名称一'], 8=>['id'=>9,'pid'=>6,'title'=>'标题名称一'], 9=>['id'=>10,'pid'=>6,'title'=>'标题名称一'], 10=>['id'=>11,'pid'=>2,'title'=>'标题名称一'], ]; $result = foreachd($arr,0);var_dump($result); function foreachd($arr,$pid,$showpage = '') { $setpage = 1; $result = array(); foreach($arr as $key=>$val) { if($val['pid'] == $pid) { $setshowpage = $showpage == '' ? $setpage : $showpage.'.'.$setpage; $arr[$key]['page'] = $setshowpage; $setpage++; $setarray = ['page'=>$setshowpage,'title'=>$val['title']]; $result[] = $setarray; $result = array_merge($result,foreachd($arr,$val['id'],$setshowpage)); } } return $result; } /*function foreachd($arr,$pid) { $return = array(); foreach($arr as $val) { if($val['pid'] == $pid) { $return[$val['id']]['title'] = $val['title']; $childrendata = foreachd($arr,$val['id']); if($childrendata) { $return[$val['id']]['children'] = $childrendata; } } } return $return; }*/
先查询pid为0的,遍历这些pid为0的,查询pid为这些item的id的,然后循环输出
如果是oracle,可以用level(),sys_connect_by_path()函数实现
不使用函数的话,可以建视图实现。
这一参考我这个方法,使用递推来遍历,只要是处理数据结构的都有方法的,只在于效率的高低
查询好数据使用函数调取,第一个完美支持你的需求,第二个是数据递归存放