PHP不用递归实现无限分级的例子分享

这篇文章主要介绍了PHP不用递归实现无限分级的例子,实际上是一种思路,并用简单的例子来说明,需要的朋友可以参考下。

两个不用递归的树形数组操作函数,代码如下:

  1. /**
  2. * 创建父节点树形数组
  3. * 参数
  4. * $ar 数组,邻接列表方式组织的数据
  5. * $id 数组中作为主键的下标或关联键名
  6. * $pid 数组中作为父键的下标或关联键名
  7. * 返回 多维数组
  8. **/
  9. function find_parent($ar, $, $p) {
  10. foreach($ar as $v) $t[$v[$id]] = $v;
  11. foreach ($t as $k => $item){
  12. if( $item[$pid] ){
  13. if( ! isset($t[$item[$pid]]['parent'][$item[$pid]]) )
  14. $t[$item[$id]]['parent'][$item[$pid]] =& $t[$item[$pid]];
  15. }
  16. }
  17. return $t;
  18. }
  19. /**
  20. * 创建子节点树形数组
  21. * 参数
  22. * $ar 数组,邻接列表方式组织的数据
  23. * $id 数组中作为主键的下标或关联键名
  24. * $pid 数组中作为父键的下标或关联键名
  25. * 返回 多维数组
  26. **/
  27. function find_child($ar, $, $p) {
  28. foreach($ar as $v) $t[$v[$id]] = $v;
  29. foreach ($t as $k => $item){
  30. if( $item[$pid] ) {
  31. $t[$item[$pid]]['child'][$item[$id]] =& $t[$k];
  32. }
  33. }
  34. return $t;
  35. }

使用例子:

  1. $data = array(
  2. array('ID'=>1, 'PARENT'=>0, 'NAME'=>'祖父'),
  3. array('ID'=>2, 'PARENT'=>1, 'NAME'=>'父亲'),
  4. array('ID'=>3, 'PARENT'=>1, 'NAME'=>'叔伯'),
  5. array('ID'=>4, 'PARENT'=>2, 'NAME'=>'自己'),
  6. array('ID'=>5, 'PARENT'=>4, 'NAME'=>'儿子'),
  7. );
  8. $p = find_parent($data, 'ID', 'PARENT');
  9. $c = find_child($data, 'ID', 'PARENT');

执行效果:

  1. Array
  2. (
  3. [1] => Array
  4. (
  5. [ID] => 1
  6. [PARENT] => 0
  7. [NAME] => 祖父
  8. [child] => Array
  9. (
  10. [2] => Array
  11. (
  12. [ID] => 2
  13. [PARENT] => 1
  14. [NAME] => 父亲
  15. [child] => Array
  16. (
  17. [4] => Array
  18. (
  19. [ID] => 4
  20. [PARENT] => 2
  21. [NAME] => 自己
  22. [child] => Array
  23. (
  24. [5] => Array
  25. (
  26. [ID] => 5
  27. [PARENT] => 4
  28. [NAME] => 儿子
  29. )
  30. )
  31. )
  32. )
  33. )
  34. [3] => Array
  35. (
  36. [ID] => 3
  37. [PARENT] => 1
  38. [NAME] => 叔伯
  39. )
  40. )
  41. )
  42. [2] => Array
  43. (
  44. [ID] => 2
  45. [PARENT] => 1
  46. [NAME] => 父亲
  47. [child] => Array
  48. (
  49. [4] => Array
  50. (
  51. [ID] => 4
  52. [PARENT] => 2
  53. [NAME] => 自己
  54. [child] => Array
  55. (
  56. [5] => Array
  57. (
  58. [ID] => 5
  59. [PARENT] => 4
  60. [NAME] => 儿子
  61. )
  62. )
  63. )
  64. )
  65. )
  66. [3] => Array
  67. (
  68. [ID] => 3
  69. [PARENT] => 1
  70. [NAME] => 叔伯
  71. )
  72. [4] => Array
  73. (
  74. [ID] => 4
  75. [PARENT] => 2
  76. [NAME] => 自己
  77. [child] => Array
  78. (
  79. [5] => Array
  80. (
  81. [ID] => 5
  82. [PARENT] => 4
  83. [NAME] => 儿子
  84. )
  85. )
  86. )
  87. [5] => Array
  88. (
  89. [ID] => 5
  90. [PARENT] => 4
  91. [NAME] => 儿子
  92. )
  93. )