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

发布时间:2020-08-03 12:41:04 作者:shenliyang
来源:网络 阅读:231

点击(此处)折叠或打开

  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. php下利用递归实现无限级分类
  2. 如何使用php实现数组顺序反转

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

更多

上一篇:学习Python为什么要报培训班?

下一篇:MongoDb的基本操作快速入门

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》