PHP超牛逼无限极分类生成树方法
你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了。
这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,巧在引用,整理分享了。
functiongenerateTree($items){ $tree=array(); foreach($itemsas$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'=>'长丰县'), 5=>array('id'=>5,'pid'=>1,'name'=>'安庆市'), ); print_r(generateTree($items));
可以看到下面打印的结果:
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]=>长丰县 ) ) ) [1]=>Array ( [id]=>5 [pid]=>1 [name]=>安庆市 ) ) ) [1]=>Array ( [id]=>2 [pid]=>0 [name]=>浙江省 ) )
上面生成树方法还可以精简到5行:
functiongenerateTree($items){ foreach($itemsas$item) $items[$item['pid']]['son'][$item['id']]=&$items[$item['id']]; returnisset($items[0]['son'])?$items[0]['son']:array(); }
上面这种无限极分类数据树形结构化的方法值得借鉴。但是我觉得这段代码实际用途并不明显啊,你想取出格式化的树形数据还是要递归啊:
/** *如何取数据格式化的树形数据 */ $tree=generateTree($items); functiongetTreeData($tree){ foreach($treeas$t){ echo$t['name'].'<br>'; if(isset($t['son'])){ getTreeData($t['son']); } } } getTreeData($tree);