使用数组实现PHP无限级分类

2023-05-21,

点击(此处)折叠或打开

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

《使用数组实现PHP无限级分类.doc》

下载本文的Word格式文档,以方便收藏与打印。