PHP递归遍历多维数组实现无限分类的方法

本文实例讲述了PHP递归遍历多维数组实现无限分类的方法。分享给大家供大家参考,具体如下:

  1. <?php
  2. //$data[]=array('id'=>1,'parentid'=>0,'name'=>'中国','img'=>'52091199');
  3. $data[]=array('id'=>1,'parentid'=>0,'name'=>'中国');
  4. $data[]=array('id'=>2,'parentid'=>0,'name'=>'美国');
  5. $data[]=array('id'=>3,'parentid'=>0,'name'=>'韩国');
  6. $data[]=array('id'=>4,'parentid'=>1,'name'=>'北京');
  7. $data[]=array('id'=>5,'parentid'=>1,'name'=>'上海');
  8. $data[]=array('id'=>6,'parentid'=>1,'name'=>'广西');
  9. $data[]=array('id'=>7,'parentid'=>6,'name'=>'桂林');
  10. $data[]=array('id'=>8,'parentid'=>6,'name'=>'南宁');
  11. $data[]=array('id'=>9,'parentid'=>6,'name'=>'柳州');
  12. $data[]=array('id'=>10,'parentid'=>2,'name'=>'纽约');
  13. $data[]=array('id'=>11,'parentid'=>2,'name'=>'华盛顿');
  14. $data[]=array('id'=>12,'parentid'=>3,'name'=>'首尔');
  15. $tree=build_tree($data,0);
  16. //echo memory_get_usage();
  17. print_r($tree);
  18. function findChild(&$arr,$id){
  19. $childs=array();
  20. foreach ($arr as $k => $v){
  21. if($v['parentid']== $id){
  22. $childs[]=$v;
  23. }
  24. }
  25. return $childs;
  26. }
  27. function build_tree($rows,$root_id){
  28. $childs=findChild($rows,$root_id);
  29. if(emptyempty($childs)){
  30. return null;
  31. }
  32. foreach ($childs as $k => $v){
  33. $rescurTree=build_tree($rows,$v['id']);
  34. //phpfensi.com
  35. if( null != $rescurTree){
  36. $childs[$k]['childs']=$rescurTree;
  37. }
  38. }
  39. return $childs;
  40. }
  41. ?>

运行结果:

  1. Array
  2. (
  3. [0] => Array
  4. (
  5. [id] => 1
  6. [parentid] => 0
  7. [name] => 中国
  8. [childs] => Array
  9. (
  10. [0] => Array
  11. (
  12. [id] => 4
  13. [parentid] => 1
  14. [name] => 北京
  15. )
  16. [1] => Array
  17. (
  18. [id] => 5
  19. [parentid] => 1
  20. [name] => 上海
  21. )
  22. [2] => Array
  23. (
  24. [id] => 6
  25. [parentid] => 1
  26. [name] => 广西
  27. [childs] => Array
  28. (
  29. [0] => Array
  30. (
  31. [id] => 7
  32. [parentid] => 6
  33. [name] => 桂林
  34. )
  35. [1] => Array
  36. (
  37. [id] => 8
  38. [parentid] => 6
  39. [name] => 南宁
  40. )
  41. [2] => Array
  42. (
  43. [id] => 9
  44. [parentid] => 6
  45. [name] => 柳州
  46. )
  47. )
  48. )
  49. )
  50. )
  51. [1] => Array
  52. (
  53. [id] => 2
  54. [parentid] => 0
  55. [name] => 美国
  56. [childs] => Array
  57. (
  58. [0] => Array
  59. (
  60. [id] => 10
  61. [parentid] => 2
  62. [name] => 纽约
  63. )
  64. [1] => Array
  65. (
  66. [id] => 11
  67. [parentid] => 2
  68. [name] => 华盛顿
  69. )
  70. )
  71. )
  72. [2] => Array
  73. (
  74. [id] => 3
  75. [parentid] => 0
  76. [name] => 韩国
  77. [childs] => Array
  78. (
  79. [0] => Array
  80. (
  81. [id] => 12
  82. [parentid] => 3
  83. [name] => 首尔
  84. )
  85. )
  86. )
  87. )