這次給大家帶來php怎樣快速產生無限級分類(附代碼),php快速產生無限級分類的注意事項有哪些,下面就是實戰案例,一起來看一下。
最簡單的例子:
<?php require('PHPTree.class.php');//未經處理資料, 從資料庫讀出$data = array(array('id'=>1,'name'=>'book','parent_id'=>0),array('id'=>2,'name'=>'music','parent_id'=>0),array('id'=>3,'name'=>'book1','parent_id'=>1),array('id'=>4,'name'=>'book2','parent_id'=>3));$r = PHPTree::makeTree($data);echo json_encode($r);?>
輸出:
[
{
"id": 1,
"name": "book",
"parent_id": 0,
"expanded": false, //不展開子節點
"children": [
{
"id": 3,
"name": "book1",
"parent_id": 1,
"expanded": false,
"children": [
{
"id": 4,
"name": "book2",
"parent_id": 3,
"leaf": true
}
]
}
]
},
{
"id": 2,
"name": "music",
"parent_id": 0,
"leaf": true
}
]
產生的資料就是樹形結構了,可以結合ExtJS等前端架構來使用了。git中包含了一個ExtJS的demo,大家可以參考。
示範:
如果不需要使用前端架構,只是用HTML輸出,可以使用下面的方法:
$r = PHPTree::makeTreeForHtml($data);
得到一個一維數組,用 level 欄位來標識分類的層次:
array( array( 'id'=>1, 'name'=>'使用者管理', 'parent_id'=>0, 'level'=>0 //一級分類 ), array( 'id'=>1, 'name'=>'使用者列表', 'parent_id'=>1, 'level'=>1 //二級分類 ) ....);
輸出為select標籤:
echo '<h1>PHPTree樹形結構</h1>';echo '<select style="width:300px;">';foreach($r as $item){echo '<option>';//根據所在的層次縮排echo str_repeat('......',$item['level']);echo $item['name'];echo '</option>';}echo '</select>';
示範:
git中包含了一個輸出HTML的demo,大家可以參考。
關於資料庫的設計,只需要保證包含 id 和 parent_id 欄位即可,其他欄位可以自行添加,不會影響資料產生。parent_id是父級ID,如果是一級分類,就設為 0 。當然,欄位也是可以配置的。請繼續往下看,我將介紹一些進階的使用方法。
展開子節點:
PHPTree::makeTree( $data, array( 'expanded' => true));
輸出的資料為:
[
{
id:1,
name:'book1',
expanded:true,//展開子節點
children:[
...
]
}
]
自訂主鍵和父鍵:
//資料庫讀出$data = array( array( 'order_id'=>1, //主鍵 'name'=>'book1', 'pid'=>0, //父鍵 ... ));PHPTree::makeTree( $data, array( 'primary_key' => 'order_id', 'parent_key' => 'pid'));
輸出的資料為:
[
{
order_id:1,
name:'book1',
pid:0,
...
}
]
makeTreeForHtml 方法也支援配置主鍵和父鍵。
還有其他欄位也可以自訂,但下面這些參數僅支援 makeTree 方法:
$r = PHPTree::makeTree($data, array( 'expanded_key' => 'expanded', 'children_key' => 'children', 'leaf_key' => 'leaf'));
預設,這些欄位的配置都是以ExtJS為參考的,如果你使用zTree架構的話,這些欄位就需要重新設定了。
zTree 是一款強大的國產樹形架構,它還支援 簡單JSON格式,是一維資料格式,實際上就不需要用到PHPTree了。當然,PHPTree輸出的資料層次感清晰,zTree也是支援的。
相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
推薦閱讀:
PHP動態擷取函數參數步驟詳解
PHP原型模式案例解析