先查詢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()函數實作
不使用函數的話,可以建立視圖實作。
這一參考我這個方法,使用遞推來遍歷,只要是處理資料結構的都有方法的,只在於效率的高低
查詢好資料使用函數調取,第一個完美支援你的需求,第二個是資料遞歸存放