• 技术文章 >后端开发 >php教程

    PHP超牛逼无限极分类生成树方法_php技巧

    2016-05-16 20:16:11原创475
    你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了。

    这是我在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();
    }

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

    复制代码 代码如下:

    /**
    * 如何取数据格式化的树形数据
    */
    $tree = generateTree($items);
    function getTreeData($tree){
    foreach($tree as $t){
    echo $t['name'].'
    ';
    if(isset($t['son'])){
    getTreeData($t['son']);
    }
    }
    }
    getTreeData($tree);
    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    上一篇:php实现的IMEI限制的短信验证码发送类_php实例 下一篇:php中header跳转使用include包含解决参数丢失问题_php实例
    大前端线上培训班

    相关文章推荐

    • 推荐一本PHP程序猿都应该拜读的书_PHP• Thinkphp关闭缓存的方法_php实例• PHP命名空间(Namespace)的使用详解_php实例• 请问一个PHP安装程序的小疑点• php.ini设立全攻略

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网