当前位置:首页 > PHP教程 > php应用 > 列表

PHP递归实现层级树状展开

发布:smiling 来源: PHP粉丝网  添加日期:2019-10-20 19:40:05 浏览: 评论:0 

本文实例为大家分享了PHP递归实现层级树状展开的主要代码,供大家参考,具体内容如下:

  1. <?php 
  2.  
  3. $db = mysql_connect('localhost''root''root') or die('Can\'t connect to database');  
  4.  
  5. mysql_select_db('test') or die('Can\'t find database : test');  
  6.  
  7. $result = mysql_query('select id, fid, name from tree');  
  8.  
  9. while($arr = mysql_fetch_array($result)){  
  10.  
  11.   $data[] = array(  
  12.  
  13.     'id' => $arr['id'],   
  14.  
  15.     'fid' => $arr['fid'],  
  16.  
  17.     'name' => $arr['name'],   
  18.  
  19.   );  
  20.  
  21. }  
  22.  
  23.     
  24.  
  25. // 将数据按照缩进简单排列 见图1  
  26.  
  27. function data2arr($tree, $rootId = 0, $level = 0) {  
  28.  
  29.   foreach($tree as $leaf) {  
  30.  
  31.     if($leaf['fid'] == $rootId) {  
  32.  
  33.       echo str_repeat('    ', $level) . $leaf['id'] . ' ' . $leaf['name'] . '<br data-filtered="filtered">';  
  34.  
  35.       foreach($tree as $l) {  
  36.  
  37.         if($l['fid'] == $leaf['id']) {  
  38.  
  39.           data2arr($tree, $leaf['id'], $level + 1);  
  40.  
  41.           break;  
  42.  
  43.         }  
  44.  
  45.       }  
  46.  
  47.     }  
  48.  
  49.   }  
  50.  
  51. }  
  52.  
  53.     
  54.  
  55. data2arr($data);  
  56.  
  57. echo '<br data-filtered="filtered">-----------------------------------------------------------------------<br data-filtered="filtered">';  
  58.  
  59.     
  60.  
  61. // 将数据按照所属关系封装 见图2  
  62.  
  63. function arr2tree($tree, $rootId = 0) {  
  64.  
  65.   $return = array();  
  66.  
  67.   foreach($tree as $leaf) {  
  68.  
  69.     if($leaf['fid'] == $rootId) {  
  70.  
  71.       foreach($tree as $subleaf) {  
  72.  
  73.         if($subleaf['fid'] == $leaf['id']) {  
  74.  
  75.           $leaf['children'] = arr2tree($tree, $leaf['id']);  
  76.  
  77.           break;  
  78.  
  79.         }  
  80.  
  81.       }  
  82.  
  83.       $return[] = $leaf;  
  84.  
  85.     }  
  86.  
  87.   }  
  88.  
  89.   return $return;  
  90.  
  91. }  
  92.  
  93.     
  94.  
  95. $tree = arr2tree($data);  
  96.  
  97. print_r($tree);  
  98.  
  99. echo '<br data-filtered="filtered">-----------------------------------------------------------------------<br data-filtered="filtered">';  
  100.  
  101.     
  102.  
  103. // 将数据使用HTML再次展现 见图3  
  104.  
  105. function tree2html($tree) {  
  106.  
  107.   echo '<ul>';  
  108.  
  109.   foreach($tree as $leaf) {  
  110.  
  111.     echo '<li>' .$leaf['name'];  
  112.  
  113.     if(! emptyempty($leaf['children'])) tree2html($leaf['children']);  
  114.  
  115.     echo '</li>';  
  116.  
  117.   }  
  118.  
  119.   echo '</ul>';  
  120.  
  121. }  
  122.  
  123. //www.phpfensi.com 
  124.  
  125. tree2html($tree); 
  126. ?> 

Tags: PHP递归 PHP层级树状

分享到: