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

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

发布:smiling 来源: PHP粉丝网  添加日期:2020-11-18 16:38:42 浏览: 评论:0 

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

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

  1. /** 
  2.  * 创建父节点树形数组 
  3.  * 参数 
  4.  * $ar 数组,邻接列表方式组织的数据 
  5.  * $id 数组中作为主键的下标或关联键名 
  6.  * $pid 数组中作为父键的下标或关联键名 
  7.  * 返回 多维数组 
  8.  **/ 
  9. function find_parent($ar$id='id'$pid='pid') { 
  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$id='id'$pid='pid') { 
  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

使用例子:

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

Tags: PHP无限分级

分享到: