使用数组实现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. ?>

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...