數(shù)據(jù)庫(kù)文件xd_item:
id pid item lead ...
1 0 標(biāo)題名稱一
2 0 標(biāo)題名稱二
3 1 中標(biāo)題名稱1-1
4 1 中標(biāo)題名稱1-2
5 2 中標(biāo)題名稱2-1
6 2 中標(biāo)題名稱2-2
8 3 小標(biāo)題名稱1-1-1
9 6 小標(biāo)題名稱2-2-1
10 6 小標(biāo)題名稱2-2-2
11 2 中標(biāo)題名稱2-3
---------------------
輸出效果:
序號(hào) 項(xiàng)目名稱
1 標(biāo)題名稱一
1.1 中標(biāo)題名稱1-1
1.1.1 小標(biāo)題名稱1-1-1
1.2 中標(biāo)題名稱1-2
2 標(biāo)題名稱二
2.1 中標(biāo)題名稱2-1
2.2 中標(biāo)題名稱2-2
2.2.1 小標(biāo)題名稱2-2-1
2.2.2 小標(biāo)題名稱2-2-2
2.3 中標(biāo)題名稱2-3
============================
要在PHP實(shí)現(xiàn)這個(gè)輸出效果,要怎么實(shí)現(xiàn)呢?
Pertanyakan dahulu mereka yang pidnya 0, lalui mereka yang pidnya 0, tanya mereka yang pidnya ialah id item ini, dan kemudian keluarkan dalam gelung
Jika ia adalah Oracle, anda boleh menggunakan fungsi level(), sys_connect_by_path() untuk melaksanakannya
Jika anda tidak menggunakan fungsi, anda boleh membina pandangan untuk melaksanakannya.
Ini adalah rujukan kepada kaedah saya, yang menggunakan rekursi untuk melintasi Selagi ia berkaitan dengan struktur data, ada kaedah, ia hanya bergantung pada kecekapan
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;
}
Soal data menggunakan panggilan fungsi yang pertama menyokong keperluan anda dengan sempurna, dan yang kedua ialah penyimpanan data secara rekursif
$arr = [
0=>['id'=>1,'pid'=>0,'title'=>'標(biāo)題名稱一'],
1=>['id'=>2,'pid'=>0,'title'=>'標(biāo)題名稱一'],
2=>['id'=>3,'pid'=>1,'title'=>'標(biāo)題名稱一'],
3=>['id'=>4,'pid'=>1,'title'=>'標(biāo)題名稱一'],
4=>['id'=>5,'pid'=>2,'title'=>'標(biāo)題名稱一'],
5=>['id'=>6,'pid'=>2,'title'=>'標(biāo)題名稱一'],
6=>['id'=>7,'pid'=>3,'title'=>'標(biāo)題名稱一'],
7=>['id'=>8,'pid'=>3,'title'=>'標(biāo)題名稱一'],
8=>['id'=>9,'pid'=>6,'title'=>'標(biāo)題名稱一'],
9=>['id'=>10,'pid'=>6,'title'=>'標(biāo)題名稱一'],
10=>['id'=>11,'pid'=>2,'title'=>'標(biāo)題名稱一'],
];
$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;
}*/