当前位置:首页 > 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.  * 参数 
  23.  * $ar 数组,邻接列表方式组织的数据 
  24.  * $id 数组中作为主键的下标或关联键名 
  25.  * $pid 数组中作为父键的下标或关联键名 
  26.  * 返回 多维数组 
  27.  **/ 
  28. function find_child($ar, $id='id', $pid='pid') { 
  29.   foreach($ar as $v) $t[$v[$id]] = $v; 
  30.   foreach ($t as $k => $item){ 
  31.     if( $item[$pid] ) { 
  32.       $t[$item[$pid]]['child'][$item[$id]] =& $t[$k]; 
  33.     } 
  34.   } 
  35.   return $t; 
  36. } 

使用例子:

  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.  
  35.                                 ) 
  36.  
  37.                         ) 
  38.  
  39.                     [3] => Array 
  40.                         ( 
  41.                             [ID] => 3 
  42.                             [PARENT] => 1 
  43.                             [NAME] => 叔伯 
  44.                         ) 
  45.  
  46.                 ) 
  47.  
  48.         ) 
  49.  
  50.     [2] => Array 
  51.         ( 
  52.             [ID] => 2 
  53.             [PARENT] => 1 
  54.             [NAME] => 父亲 
  55.             [child] => Array 
  56.                 ( 
  57.                     [4] => Array 
  58.                         ( 
  59.                             [ID] => 4 
  60.                             [PARENT] => 2 
  61.                             [NAME] => 自己 
  62.                             [child] => Array 
  63.                                 ( 
  64.                                     [5] => Array 
  65.                                         ( 
  66.                                             [ID] => 5 
  67.                                             [PARENT] => 4 
  68.                                             [NAME] => 儿子 
  69.                                         ) 
  70.  
  71.                                 ) 
  72.  
  73.                         ) 
  74.  
  75.                 ) 
  76.  
  77.         ) 
  78.  
  79.     [3] => Array 
  80.         ( 
  81.             [ID] => 3 
  82.             [PARENT] => 1 
  83.             [NAME] => 叔伯 
  84.         ) 
  85.  
  86.     [4] => Array 
  87.         ( 
  88.             [ID] => 4 
  89.             [PARENT] => 2 
  90.             [NAME] => 自己 
  91.             [child] => Array 
  92.                 ( 
  93.                     [5] => Array 
  94.                         ( 
  95.                             [ID] => 5 
  96.                             [PARENT] => 4 
  97.                             [NAME] => 儿子 
  98.                         ) 
  99.  
  100.                 ) 
  101.  
  102.         ) 
  103.  
  104.     [5] => Array 
  105.         ( 
  106.             [ID] => 5 
  107.             [PARENT] => 4 
  108.             [NAME] => 儿子 
  109.         ) 
  110.  
  111. ) 

Tags: PHP无限分级

分享到: