PHP開發之分類技術利用foreach循環實現分類功能
什麼是分類呢?就像windows下新建一個資料夾,在新建的資料夾下又可以新建
一個資料夾,這樣無限循環下去,分類也是這樣,父類別可以分出它子類,子類別又
可以分出它的子類別。 。 。 。 。 。
那PHP又是如何實現它的分類的呢?如何把它的各個分類一一列出來呢?
本章節我們將介紹使用foreach迴圈來實現分類功能。
首先建立一個分類數組:
<?php $categories = array( array('id'=>1,'name'=>'电脑','pid'=>0), array('id'=>2,'name'=>'手机','pid'=>0), array('id'=>3,'name'=>'笔记本','pid'=>1), array('id'=>4,'name'=>'台式机','pid'=>1), array('id'=>5,'name'=>'智能机','pid'=>2), array('id'=>6,'name'=>'功能机','pid'=>2), array('id'=>7,'name'=>'超级本','pid'=>3), array('id'=>8,'name'=>'游戏本','pid'=>3), ); ?>
這裡有3個字段, 排序id, 分類名稱name,和分類pid
目標是將它轉換為下面這種結構:
<?php array( //1对应$categories中的id ,方便直接读取 1 => array( 'id'=>1, 'name'=>'电脑', 'pid'=>0, 'children' =>array( array( 'id'=>3, 'name'=>'笔记本', 'pid'=>1, 'children'=>array( 'id'=>7, 'name'=> '超极本', 'pid'=>'3' ), array( 'id'=>8, 'name'=> '游戏本', 'pid'=>'3' ) , ), array( 'id'=>4, 'name'=>'台式机', 'pid'=>1, ), ), ), 2 => array( 'id'=>2, 'name'=>'手机', 'pid'=>0, 'children' =>array( array( 'id'=>5, 'name'=>'智能机', 'pid'=>2, ), array( 'id'=>6, 'name'=>'功能机', 'pid'=>2, ), ), ), ); ?>
實作過程:
#建立一個空數組
<?php $tree = array(); ?>
第一步,將所有的分類id作為數組key,並創建children單元
<?php foreach($categories as $category){ $tree[$category['id']] = $category; $tree[$category['id']]['children'] = array(); } ?>
第二步,利用引用,將每個分類添加到父類children數組中,這樣一次遍歷即可形成樹形結構。
<?php foreach ($tree as $key=>$value) { if ($value['pid'] != 0) { $tree[$value['pid']]['children'][] = $tree[$key]; } } ?>
最後使用print_r();印出來
<?php print_r($tree); ?>
優點:關係清楚,修改上下級關係簡單。
缺點:使用PHP處理,如果分類數量龐大,效率也會降低。