對於無限極分類,要查找一個分類的頂級分類聽起來很復雜
其實只要弄清原理,也並不是那么令人望而生畏!
<?php
$sql = "select id, pid from tablename ";
// 查詢后 將結果處理成 如下數組格式
$arr = [
// id => pid
1 => 0,
// 省略...
6 => 1,
// 省略...
12 =>6
];
// 建議將這數組緩存起來
$id = 12;
while($arr[$id]) {
$id = $arr[$id];
}
echo $id; // 1
注意:
1.其實無限極分類原理清晰后就會發現,其實id->pid關系緊密,pid頂級為0,故采用while循環是很好的解決辦法!
2.當然對數組的格式處理也得明白了。
關於無限極菜單簡單實現
1.先定義如下結構數組,當然數據庫查詢也可以處理成如下結構
$arr=array(
1=>array('id'=>'1','name'=>'北京','pid'=>'0'),
2=>array('id'=>'2','name'=>'上海','pid'=>'0'),
3=>array('id'=>'3','name'=>'浦東','pid'=>'2'),
4=>array('id'=>'4','name'=>'朝陽','pid'=>'1'),
5=>array('id'=>'5','name'=>'廣州','pid'=>'0'),
6=>array('id'=>'6','name'=>'三里屯','pid'=>'4'),
7=>array('id'=>'7','name'=>'廣東','pid'=>'5'),
8=>array('id'=>'8','name'=>'三里','pid'=>'4'),
10=>array('id'=>'10','name'=>'小胡同','pid'=>'8')
);
2.實現方法
public function getTrees($arr,$pid,$step = 0){
global $tree;
foreach($arr as $val) {
if($val['pid'] == $pid) {
$flag = str_repeat(' ',$step);
$val['cate_name'] = $flag.$val['cate_name'];
$tree[] = $val;
$this->getTrees($arr , $val['cate_id'] ,$step+1);
}
}
return $tree;
}
其中$flag參數可以根據自己喜好設計
3.調用方法
$newarr = $this->getTreegs($arr, 0, 0);
注意:這些都是在thinkphp框架下實現的,調用方法等語法一看便知,如果是自己寫原生代碼,不在框架內,則自行修改調用方式(去掉$this->function()格式)。