博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分享一个牛逼的PHP无限极分类生成树方法,巧用引用(转)
阅读量:7049 次
发布时间:2019-06-28

本文共 1389 字,大约阅读时间需要 4 分钟。

你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了。

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

转载于:https://www.cnblogs.com/xingmeng/p/3253033.html

你可能感兴趣的文章
解决mysql无法导入本地文件的问题
查看>>
HBase 系统架构
查看>>
RichFace标签学习笔记
查看>>
iOS中block介绍(四)揭开神秘面纱(下)
查看>>
更改yum源为阿里云的yum源
查看>>
解决exchang服务器连接不可用问题
查看>>
Tomcat启动权限
查看>>
一步一步學習partitions之hash partitions
查看>>
POJ 1061 青蛙的约会 扩展欧几里得
查看>>
我的友情链接
查看>>
随笔-ftp文件上传,删除
查看>>
Ansible问题汇总
查看>>
linux上部署hadoop集群 基础篇
查看>>
java中堆(heap)和堆栈(stack)
查看>>
H3C 5500/5820 端口聚合LACP
查看>>
我的友情链接
查看>>
Forefront TMG 服务器中如何规划和实现高可用性
查看>>
Exchange Server 2010 故障分享
查看>>
java正则匹配count字符串
查看>>
Exchange2007/2010如何恢复被禁用或者删除的邮箱
查看>>