你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了。
这是我在OSChina上看到的一段非常精简的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' => '长丰县'),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行:

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();}


上面这种无限极分类数据树形结构化的方法值得借鉴。但是我觉得这段代码实际用途并不明显啊,你想取出格式化的树形数据还是要递归啊:

/** * 如何取数据格式化的树形数据 * @blog<http://www.phpddt.com> */$tree = generateTree($items);function getTreeData($tree){foreach($tree as $t){        echo $t['name'].'<br>';if(isset($t['son'])){            getTreeData($t['son']);}}}getTreeData($tree);

转载请注明地址: http://www.phpddt.com/php/generateTree.html 尊重他人劳动成果就是尊重自己!


最新发布
linux下svn提交忽略某些文件... (173)
使用批处理来批量更新、提交SVN... (136)
linux查看目录文件大小命令 (146)
linux tar打包压缩排除某个... (134)
Linux tar压缩和解压 (192)
SVN子命令add用法浅析 (130)
热门博文
网友FBI探案:马蓉iPad惊人发现... (43345)
霍金携手俄罗斯富豪耗资1亿美元寻找外... (4747)
如何才能查看PHP内置函数源代码... (1210)
微信支付开发当前URL未注册的解决方... (575)
《谁为爱情买单》中的经典面试 ... (442)
让虚拟主机也用上SVN:适用于个人的... (395)
精华博文
[推荐]Centos7 安装配置 SVN (159)
easyswoole框架安装 (174)
php开启pecl的支持(推荐) (157)
1-10个恋爱表现:男朋友爱你程度到... (164)
女生喜欢你的10个程度,到第六个就可... (141)
Eclipse 没有Server选项... (211)
友情链接
我来忙 (110)