使用数组实现PHP无限级分类
admin
2023-07-05 10:05:14
0

点击(此处)折叠或打开

  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. ?>

相关内容

热门资讯

我国科学家为细胞信号“导航”开... 新华社济南5月31日电(记者张力元)人体细胞犹如一座精密的通信城市,每天都有大量“指令”穿梭传递,调...
极端大风突袭哈尔滨!过山车停摆... 极目新闻记者 詹钘5月31日,受强对流天气影响,哈尔滨国际会展中心体育场相关设施受到损坏,原计划当晚...
三原电缆取得电缆接头连接用防护... 国家知识产权局信息显示,上海三原电缆附件有限公司取得一项名为“一种电缆接头连接用防护结构”的专利,授...
原创 识... 还是那句话,机圈苦大屏久已…… 虽然大屏有大屏的美,但是小屏也有小屏的俏。在大屏旗舰占据主流的手机市...
玄戒技术取得分频电路专利,实现... 国家知识产权局信息显示,北京玄戒技术有限公司取得一项名为“分频电路、分频器、射频芯片和电子设备”的专...
为什么今年香会基调明显变了 5月29日—31日在新加坡举行的第23届香格里拉对话会(简称“香会”),见证着元首引领下大国关系继续...
成本几毛钱、假驱蚊液香精兑水,... 入夏升温,蚊虫进入活跃期,驱蚊防护成为民生刚需,《财经调查》持续接到消费者投诉,他们买到的多款网红驱...
越来越多80后90后,正在丧失... 六一儿童节到来之际,朋友圈里开始出现一种熟悉的热闹。有人晒出零食礼包,有人半开玩笑地向伴侣讨礼物,还...
洋保电子取得用于低温环境的电气... 国家知识产权局信息显示,洋保电子(太仓)有限公司取得一项名为“一种用于低温环境的电气柜”的专利,授权...
中日韩飞手争霸宁波!2026无... 潮新闻客户端 记者 陈冲 通讯员 朱凝 5月31日,2026小遛·无人机竞速世界杯(中国·宁波鄞州站...