php怎樣快速產生無限級分類(附代碼)

來源:互聯網
上載者:User
這次給大家帶來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原型模式案例解析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.