设为首页 - 加入收藏 - 网站地图 SecYe安全 Www.SecYe.Com - 国内网络信息安全IT技术门户网
当前位置:SecYe > 网络编程 > PHP > 正文

9行代码太浪费了,5行代码足矣,不用递归实现无限分类数据的树形

时间:2017-02-09 16:13 来源:未知 作者:www.secye.com 阅读:

我们知道很多开源软件的无限分类都是采用递归的算法,但是我们知道递归即浪费时间,又浪费空间(内存),

上次我也分享了个我自己原创的无限分类生成树的方法,一热心php高手网友给我提出了宝贵的建议,我测试了一下,这段代码的时间非常之短,参考: http://www.oschina.net/code/snippet_98719_11296,我再次整理了一下,发现数据库查询出数据之后,我们就已经定好了键值,因而实践中,我们一般会在model中查询出格式化成主键值对应数据的形式,因而我们可以直接用这样的数据,就少了一层循环。代码也非常简洁。

 

003/**

 

004* 此方法由@Tonton 提供

 

005* http://my.oschina.net/u/918697

 

006* @date 2012-12-12

 

007*/

 

008function genTree5($items) {

 

009foreach ($items as $item)

 

010$items[$item[\'pid\']][\'son\'][$item[\'id\']] = &$items[$item[\'id\']];

 

011return isset($items[0][\'son\']) ? $items[0][\'son\'] : array();

 

012}

 

013

 

014/**

 

015* 将数据格式化成树形结构

 

016* @author Xuefen.Tong

 

017* @param array $items

 

018* @return array

 

019*/

 

020function genTree9($items) {

 

021$tree = array(); //格式化好的树

 

022foreach ($items as $item)

 

023if (isset($items[$item[\'pid\']]))

 

024$items[$item[\'pid\']][\'son\'][] = &$items[$item[\'id\']];

 

025else

 

026$tree[] = &$items[$item[\'id\']];

 

027return $tree;

 

028}

 

029

 

030$items = array(

 

0311 => array(\'id\' => 1, \'pid\' => 0, \'name\' => \'江西省\'),

 

0322 => array(\'id\' => 2, \'pid\' => 0, \'name\' => \'黑龙江省\'),

 

0333 => array(\'id\' => 3, \'pid\' => 1, \'name\' => \'南昌市\'),

 

0344 => array(\'id\' => 4, \'pid\' => 2, \'name\' => \'哈尔滨市\'),

 

0355 => array(\'id\' => 5, \'pid\' => 2, \'name\' => \'鸡西市\'),

 

0366 => array(\'id\' => 6, \'pid\' => 4, \'name\' => \'香坊区\'),

 

0377 => array(\'id\' => 7, \'pid\' => 4, \'name\' => \'南岗区\'),

 

0388 => array(\'id\' => 8, \'pid\' => 6, \'name\' => \'和兴路\'),

 

0399 => array(\'id\' => 9, \'pid\' => 7, \'name\' => \'西大直街\'),

 

04010 => array(\'id\' => 10, \'pid\' => 8, \'name\' => \'东北林业大学\'),

 

04111 => array(\'id\' => 11, \'pid\' => 9, \'name\' => \'哈尔滨工业大学\'),

 

04212 => array(\'id\' => 12, \'pid\' => 8, \'name\' => \'哈尔滨师范大学\'),

 

04313 => array(\'id\' => 13, \'pid\' => 1, \'name\' => \'赣州市\'),

 

04414 => array(\'id\' => 14, \'pid\' => 13, \'name\' => \'赣县\'),

 

04515 => array(\'id\' => 15, \'pid\' => 13, \'name\' => \'于都县\'),

 

04616 => array(\'id\' => 16, \'pid\' => 14, \'name\' => \'茅店镇\'),

 

04717 => array(\'id\' => 17, \'pid\' => 14, \'name\' => \'大田乡\'),

 

04818 => array(\'id\' => 18, \'pid\' => 16, \'name\' => \'义源村\'),

 

04919 => array(\'id\' => 19, \'pid\' => 16, \'name\' => \'上坝村\'),

 

050);

 

051echo "

本文来源:SecYe安全网[http://www.secye.com] (责任编辑:SecYe安全)

点击复制链接 与好友分享!

顶一下
(0)
0%
踩一下
(0)
0%