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

php无限级分类(带层深)算法

发布:smiling 来源: PHP粉丝网  添加日期:2014-08-28 10:26:05 浏览: 评论:0 

一个利用数组来实现无限级分类php类程序,有需要的朋友可参考,这里就不多说什么了直接复制上代码.

php无限级分类(带层深)算法实例代码如下:

  1. <?php 
  2. $cates = array
  3.  array
  4.   'cid'   => 1, 
  5.   'cname' => '新闻'
  6.   'pid'   => 0 
  7.  ), 
  8.  
  9.  array
  10.   'cid'   => 2, 
  11.   'cname' => '通知'
  12.   'pid'   => 0 
  13.  ), 
  14.  
  15.  array
  16.   'cid'   => 3, 
  17.   'cname' => '国内新闻'
  18.   'pid'   => 1 
  19.  ), 
  20.  
  21.  array
  22.   'cid'   => 4, 
  23.   'cname' => '国际新闻'
  24.   'pid'   => 1 
  25.  ), 
  26.  
  27.  array
  28.   'cid'   => 5, 
  29.   'cname' => '北京新闻'
  30.   'pid'   => 3 
  31.  ), 
  32.  
  33.  array
  34.   'cid'   => 6, 
  35.   'cname' => '上海新闻'
  36.   'pid'   => 3 
  37.  ), 
  38.  
  39.  array
  40.   'cid'   => 7, 
  41.   'cname' => '紧急通知'
  42.   'pid'   => 2 
  43.  ), 
  44.  
  45.  array
  46.   'cid'   => 8, 
  47.   'cname' => '一般通知'
  48.   'pid'   => 2 
  49.  ), 
  50. ); 
  51.  
  52. /** 
  53.  * 生成菜单 
  54.  * 
  55.  * @param array $data 原始数据 
  56.  * @param integer $pid 当前分类的父id 
  57.  * @return array 处理后数据 
  58.  */ 
  59. function createMenuTree($data = array(), $pid = 0) 
  60.  if (emptyempty($data)) 
  61.  { 
  62.   return array(); 
  63.  } 
  64.  
  65.  static $level = 0; 
  66.  
  67.  $returnArray = array(); 
  68.  
  69.  foreach ($data as $node
  70.  { 
  71.   if ($node['pid'] == $pid
  72.   { 
  73.    $returnArray[] = array
  74.     'cid'   => $node['cid'], 
  75.     'cname' => $node['cname'], 
  76.     'level' => $level 
  77.    ); 
  78.  
  79.    if (hasChild($node['cid'], $data)) 
  80.    { 
  81.     $level++; 
  82.  
  83.     $returnArray = array_merge($returnArray, createMenuTree($data$node['cid'])); 
  84.  
  85.     $level--; 
  86.    } 
  87.   } 
  88.  } 
  89.  
  90.  return $returnArray
  91.  
  92. /** 
  93.  * 检查是否有子分类 
  94.  * 
  95.  * @param integer $cid 当前分类的id 
  96.  * @param array $data 原始数据 
  97.  * @return boolean 是否有子分类 
  98.  */ 
  99. function hasChild($cid$data
  100.  $hasChild = false; 
  101.  
  102.  foreach ($data as $node
  103.  { 
  104.   if ($node['pid'] == $cid
  105.   { 
  106.    $hasChild = true; 
  107.    break
  108.   } 
  109.  } 
  110.  
  111.  return $hasChild
  112.  
  113. header('Content-Type: text/html; charset=utf-8'); 
  114.  
  115. $result = createMenuTree($cates); 
  116. //开源代码phpfensi.com 
  117. foreach ($result as $row
  118.  for ($i = 0; $i < $row['level']; $i++) 
  119.  { 
  120.   echo "t"
  121.  } 
  122.  
  123.  echo $row['cname'] . "n"
  124. ?> 

Tags: php无限级分类 php层深层深

分享到: