PHP超牛逼無限極分類生成樹方法
你還在用浪費(fèi)時(shí)間又浪費(fèi)內(nèi)存的遞歸遍歷無限極分類嗎,看了該篇文章,我覺得你應(yīng)該換換了。
這是我在OSChina上看到的一段非常精簡(jiǎn)的PHP無限極分類生成樹方法,巧在引用,整理分享了。
function generateTree($items){
$tree = array();
foreach($items as $item){
if(isset($items[$item['pid']])){
$items[$item['pid']]['son'][] = &$items[$item['id']];
}else{
$tree[] = &$items[$item['id']];
}
}
return $tree;
}
$items = array(
1 => array('id' => 1, 'pid' => 0, 'name' => '安徽省'),
2 => array('id' => 2, 'pid' => 0, 'name' => '浙江省'),
3 => array('id' => 3, 'pid' => 1, 'name' => '合肥市'),
4 => array('id' => 4, 'pid' => 3, 'name' => '長(zhǎng)豐縣'),
5 => array('id' => 5, 'pid' => 1, 'name' => '安慶市'),
);
print_r(generateTree($items));
可以看到下面打印的結(jié)果:
Array
(
[0] => Array
(
[id] => 1
[pid] => 0
[name] => 安徽省
[son] => Array
(
[0] => Array
(
[id] => 3
[pid] => 1
[name] => 合肥市
[son] => Array
(
[0] => Array
(
[id] => 4
[pid] => 3
[name] => 長(zhǎng)豐縣
)
)
)
[1] => Array
(
[id] => 5
[pid] => 1
[name] => 安慶市
)
)
)
[1] => Array
(
[id] => 2
[pid] => 0
[name] => 浙江省
)
)
上面生成樹方法還可以精簡(jiǎn)到5行:
function generateTree($items){
foreach($items as $item)
$items[$item['pid']]['son'][$item['id']] = &$items[$item['id']];
return isset($items[0]['son']) ? $items[0]['son'] : array();
}
上面這種無限極分類數(shù)據(jù)樹形結(jié)構(gòu)化的方法值得借鑒。但是我覺得這段代碼實(shí)際用途并不明顯啊,你想取出格式化的樹形數(shù)據(jù)還是要遞歸啊:
/**
* 如何取數(shù)據(jù)格式化的樹形數(shù)據(jù)
*/
$tree = generateTree($items);
function getTreeData($tree){
foreach($tree as $t){
echo $t['name'].'<br>';
if(isset($t['son'])){
getTreeData($t['son']);
}
}
}
getTreeData($tree);
相關(guān)文章
PHP截?cái)鄻?biāo)題且兼容utf8和gb2312編碼
PHP截?cái)鄻?biāo)題的方法有很多,但同時(shí)可以兼容utf8和gb2312卻不多了,下面有個(gè)不錯(cuò)的方法,可以參考下,或許對(duì)大家有所幫助2013-09-09PHP的serialize序列化數(shù)據(jù)以及JSON格式化數(shù)據(jù)分析
這篇文章的內(nèi)容是PHP的serialize序列化數(shù)據(jù)以及JSON格式化數(shù)據(jù)分析,需要的朋友可以參考下2015-10-10php smtp實(shí)現(xiàn)發(fā)送郵件功能
這篇文章主要為大家詳細(xì)介紹了php smtp實(shí)現(xiàn)發(fā)送郵件功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06php讀取javascript設(shè)置的cookies的代碼
最主要的就是給cookies設(shè)置一個(gè)名字,在javascript設(shè)置cookies的時(shí)候不要用無參數(shù)函數(shù),那樣用的話php沒辦法讀取2010-04-04php常用字符串輸出方法分析(echo,print,printf及sprintf)
這篇文章主要介紹了php常用字符串輸出方法,結(jié)合實(shí)例形式分析了echo、print、printf及sprintf輸出字符串的具體用法與相關(guān)使用技巧,需要的朋友可以參考下2016-07-07PHP實(shí)現(xiàn)將標(biāo)點(diǎn)符號(hào)正則替換為空格的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)將標(biāo)點(diǎn)符號(hào)正則替換為空格的方法,結(jié)合實(shí)例形式分析了php針對(duì)符號(hào)的正則匹配相關(guān)操作技巧,需要的朋友可以參考下2017-08-08