+ -
当前位置:首页 → 问答吧 → 一行代码生成树

一行代码生成树

时间:2008-09-25

来源:互联网

呵呵,在和七月十五版主讨论无限级分类的时候,回复了这么一段代码,主要是实现了将数组转换成树状结构,以方便快速查询子分类的信息。关键点在于引用的使用。
详细内容请参考
http://bbs.phpchina.com/viewthread.php?tid=80868&page=4#pid616644
[php]
//从缓存或者数据库中读出以下数组内容
$a_list = array(
            1=>array('ID'=>1, 'PARENT'=>0, 'NAME'=>'祖父'),
            2=>array('ID'=>2, 'PARENT'=>1, 'NAME'=>'父亲'),
            3=>array('ID'=>3, 'PARENT'=>1, 'NAME'=>'叔伯'),
            4=>array('ID'=>4, 'PARENT'=>2, 'NAME'=>'自己'),
            5=>array('ID'=>5, 'PARENT'=>4, 'NAME'=>'儿子'),
            6=>array('ID'=>6, 'PARENT'=>5, 'NAME'=>'孙子'),
            7=>array('ID'=>7, 'PARENT'=>2, 'NAME'=>'姐妹'),
            8=>array('ID'=>8, 'PARENT'=>3, 'NAME'=>'表亲'),
            9=>array('ID'=>9, 'PARENT'=>7, 'NAME'=>'甥儿'),
            10=>array('ID'=>10, 'PARENT'=>4, 'NAME'=>'女儿'),
            11=>array('ID'=>11, 'PARENT'=>10, 'NAME'=>'外孙'),
            12=>array('ID'=>12, 'PARENT'=>5, 'NAME'=>'孙女')
            );
        //将数组转变成树,因为使用了引用,所以不会占用太多的内存,一行代码搞定
        foreach ($a_list as $id => $item) if ($item['PARENT']) $a_list[$item['PARENT']][$item['ID']] = &$a_list[$id];
         //获得ID为n的全部子孙
        //$a_list[n]
        //获得自己的全部子孙,自己的ID为4
        print_r($a_list[4]);
//结果如下:
/*
Array
(
    [ID] => 4
    [PARENT] => 2
    [NAME] => 自己
    [5] => Array
        (
            [ID] => 5
            [PARENT] => 4
            [NAME] => 儿子
            [6] => Array
                (
                    [ID] => 6
                    [PARENT] => 5
                    [NAME] => 孙子
                )
            [12] => Array
                (
                    [ID] => 12
                    [PARENT] => 5
                    [NAME] => 孙女
                )
        )
    [10] => Array
        (
            [ID] => 10
            [PARENT] => 4
            [NAME] => 女儿
            [11] => Array
                (
                    [ID] => 11
                    [PARENT] => 10
                    [NAME] => 外孙
                )
        )
)

*/
[/php]

作者: sentrychen   发布时间: 2008-09-25

作者: 40years   发布时间: 2008-10-09

作者: ianlee   发布时间: 2008-11-11

非常漂亮!

作者: dx_andy   发布时间: 2008-11-21


确实比较漂亮!

作者: fybird   发布时间: 2009-05-17

留个记号,看看

作者: jyb21   发布时间: 2009-06-20

我在这里做个标记

作者: strongability   发布时间: 2009-09-25

俺也来个标记

作者: mackay1213   发布时间: 2009-09-26

我顶你个肺

作者: minoc   发布时间: 2009-09-27

就知道那句话的目的是什么了,就是没看懂那句话

作者: minoc   发布时间: 2009-09-27

引用太强大,看不懂啊
不过用到是会用

作者: minoc   发布时间: 2009-09-27

学习

作者: tang2000   发布时间: 2009-09-27

dz自带的复制不好用啊!

作者: flyhacker   发布时间: 2009-09-29

不错,顶楼主..........
















斗破苍穹 http://www.shucheng.com/book/5/5575/

作者: 智没平   发布时间: 2009-09-29

留个标签在

作者: denghai315   发布时间: 2009-11-06

关注

作者: shanji   发布时间: 2009-11-06