• php 引用地址符&实现无限极分类


    算法利用了循环迭代,将线性结构按照父子关系以树形结构输出,算法的关键在于使用了&引用.

    优点:速度快,效率高.

    缺点:数组的key值必须与id值相同,不便于取出数据(使用递归获取数据), 数据必须一次性取出

    1. $tree = []; // 格式化好的数组
    2. $regionArr = array(
    3. array('id' => 1, 'pid' => 0, 'name' => '河北省'),
    4. array('id' => 2, 'pid' => 0, 'name' => '北京市'),
    5. array('id' => 3, 'pid' => 1, 'name' => '邯郸市'),
    6. array('id' => 4, 'pid' => 2, 'name' => '朝阳区'),
    7. array('id' => 5, 'pid' => 2, 'name' => '通州区'),
    8. array('id' => 6, 'pid' => 4, 'name' => '望京'),
    9. array('id' => 7, 'pid' => 4, 'name' => '酒仙桥'),
    10. array('id' => 8, 'pid' => 3, 'name' => '永年区'),
    11. array('id' => 9, 'pid' => 1, 'name' => '武安市'),
    12. );
    13. $regionIdTemp = $regionArr ? array_column($regionArr, null, 'id') : [];
    14. foreach ($regionArr as $item) {
    15. $id = $item['id'];
    16. $item['pid'] != 0 ? $regionIdTemp[$item['pid']]['children'][] = &$regionIdTemp[$id] : $tree[] = &$regionIdTemp[$id];
    17. }
    18. halt($tree);

    输出结果如下:

    1. array(2) {
    2. [0] => &array(4) {
    3. ["id"] => int(1)
    4. ["pid"] => int(0)
    5. ["name"] => string(9) "河北省"
    6. ["children"] => array(2) {
    7. [0] => &array(4) {
    8. ["id"] => int(3)
    9. ["pid"] => int(1)
    10. ["name"] => string(9) "邯郸市"
    11. ["children"] => array(1) {
    12. [0] => &array(3) {
    13. ["id"] => int(8)
    14. ["pid"] => int(3)
    15. ["name"] => string(9) "永年区"
    16. }
    17. }
    18. }
    19. [1] => &array(3) {
    20. ["id"] => int(9)
    21. ["pid"] => int(1)
    22. ["name"] => string(9) "武安市"
    23. }
    24. }
    25. }
    26. [1] => &array(4) {
    27. ["id"] => int(2)
    28. ["pid"] => int(0)
    29. ["name"] => string(9) "北京市"
    30. ["children"] => array(2) {
    31. [0] => &array(4) {
    32. ["id"] => int(4)
    33. ["pid"] => int(2)
    34. ["name"] => string(9) "朝阳区"
    35. ["children"] => array(2) {
    36. [0] => &array(3) {
    37. ["id"] => int(6)
    38. ["pid"] => int(4)
    39. ["name"] => string(6) "望京"
    40. }
    41. [1] => &array(3) {
    42. ["id"] => int(7)
    43. ["pid"] => int(4)
    44. ["name"] => string(9) "酒仙桥"
    45. }
    46. }
    47. }
    48. [1] => &array(3) {
    49. ["id"] => int(5)
    50. ["pid"] => int(2)
    51. ["name"] => string(9) "通州区"
    52. }
    53. }
    54. }
    55. }

    学习笔记,如有侵权,请联系

  • 相关阅读:
    网络基础学习系列四(网络层,数据链路层和一些其他重要协议或技术)
    Cmake用户交互指南
    Java基础面试题
    【Spring Boot】响应JSON实现原理
    FFmpeg常用结构体分析
    阿里、百度、美团 Java 面试题大合集,我来教你怎么顺利拿到 offer
    [附源码]Python计算机毕业设计Django学生社团信息管理系统
    python 数据结构与算法 < >链表
    Day13交换机基本命令、IP包头、路由原理
    反射_集合,,220816,
  • 原文地址:https://blog.csdn.net/yunxixiao/article/details/127570144