zoukankan      html  css  js  c++  java
  • 分享一个牛逼的PHP无限极分类生成树方法,巧用引用(转)

    你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了。
    这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,巧在引用,整理分享了。

    1. function generateTree($items){
    2. $tree = array();
    3. foreach($items as $item){
    4. if(isset($items[$item['pid']])){
    5. $items[$item['pid']]['son'][]=&$items[$item['id']];
    6. }else{
    7. $tree[]=&$items[$item['id']];
    8. }
    9. }
    10. return $tree;
    11. }
    12. $items = array(
    13. 1=> array('id'=>1,'pid'=>0,'name'=>'安徽省'),
    14. 2=> array('id'=>2,'pid'=>0,'name'=>'浙江省'),
    15. 3=> array('id'=>3,'pid'=>1,'name'=>'合肥市'),
    16. 4=> array('id'=>4,'pid'=>3,'name'=>'长丰县'),
    17. 5=> array('id'=>5,'pid'=>1,'name'=>'安庆市'),
    18. );
    19. print_r(generateTree($items));


    可以看到下面打印的结果:

    1. Array
    2. (
    3. [0]=>Array
    4. (
    5. [id]=>1
    6. [pid]=>0
    7. [name]=>安徽省
    8. [son]=>Array
    9. (
    10. [0]=>Array
    11. (
    12. [id]=>3
    13. [pid]=>1
    14. [name]=>合肥市
    15. [son]=>Array
    16. (
    17. [0]=>Array
    18. (
    19. [id]=>4
    20. [pid]=>3
    21. [name]=>长丰县
    22. )
    23.  
    24. )
    25.  
    26. )
    27.  
    28. [1]=>Array
    29. (
    30. [id]=>5
    31. [pid]=>1
    32. [name]=>安庆市
    33. )
    34.  
    35. )
    36.  
    37. )
    38.  
    39. [1]=>Array
    40. (
    41. [id]=>2
    42. [pid]=>0
    43. [name]=>浙江省
    44. )
    45.  
    46. )


    上面生成树方法还可以精简到5行:

    1. function generateTree($items){
    2. foreach($items as $item)
    3. $items[$item['pid']]['son'][$item['id']]=&$items[$item['id']];
    4. return isset($items[0]['son'])? $items[0]['son']: array();
    5. }


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

      1. /**
      2. * 如何取数据格式化的树形数据
      3. * @blog<http://www.phpddt.com>
      4. */
      5. $tree = generateTree($items);
      6. function getTreeData($tree){
      7. foreach($tree as $t){
      8. echo $t['name'].'<br>';
      9. if(isset($t['son'])){
      10. getTreeData($t['son']);
      11. }
      12. }
      13. }
      14. getTreeData($tree);
  • 相关阅读:
    mac 使用tree命令
    为什么redis支持lua脚本功能
    redis协议
    Linux的SOCKET编程详解
    大型网站架构之分布式消息队列
    自定义String
    逆转单链表
    单例模式 C++
    构造函数不能为虚函数
    Windows消息机制
  • 原文地址:https://www.cnblogs.com/xingmeng/p/3253033.html
Copyright © 2011-2022 走看看