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


    <?php
    $cates = array(
     array(
      'cid'   => 1,
      'cname' => '新闻',
      'pid'   => 0
     ),
    
     array(
      'cid'   => 2,
      'cname' => '通知',
      'pid'   => 0
     ),
    
     array(
      'cid'   => 3,
      'cname' => '国内新闻',
      'pid'   => 1
     ),
    
     array(
      'cid'   => 4,
      'cname' => '国际新闻',
      'pid'   => 1
     ),
    
     array(
      'cid'   => 5,
      'cname' => '北京新闻',
      'pid'   => 3
     ),
    
     array(
      'cid'   => 6,
      'cname' => '上海新闻',
      'pid'   => 3
     ),
    
     array(
      'cid'   => 7,
      'cname' => '紧急通知',
      'pid'   => 2
     ),
    
     array(
      'cid'   => 8,
      'cname' => '一般通知',
      'pid'   => 2
     ),
    );
    
    /**
     * 生成菜单
     *
     * @param array $data 原始数据
     * @param integer $pid 当前分类的父id
     * @return array 处理后数据
     */
    function createMenuTree($data = array(), $pid = 0)
    {
     if (empty($data))
     {
      return array();
     }
    
     static $level = 0;
    
     $returnArray = array();
    
     foreach ($data as $node)
     {
      if ($node['pid'] == $pid)
      {
       $returnArray[] = array(
        'cid'   => $node['cid'],
        'cname' => $node['cname'],
        'level' => $level
       );
    
       if (hasChild($node['cid'], $data))
       {
        $level++;
    
        $returnArray = array_merge($returnArray, createMenuTree($data, $node['cid']));
    
        $level--;
       }
      }
     }
    
     return $returnArray;
    }
    
    /**
     * 检查是否有子分类
     *
     * @param integer $cid 当前分类的id
     * @param array $data 原始数据
     * @return boolean 是否有子分类
     */
    function hasChild($cid, $data)
    {
     $hasChild = false;
    
     foreach ($data as $node)
     {
      if ($node['pid'] == $cid)
      {
       $hasChild = true;
       break;
      }
     }
    
     return $hasChild;
    }
    
    header('Content-Type: text/html; charset=utf-8');
    
    $result = createMenuTree($cates);
    
    foreach ($result as $row)
    {
     for ($i = 0; $i < $row['level']; $i++)
     {
      echo "t";
     }
    
     echo $row['cname'] . "n";
    }
    ?>
  • 相关阅读:
    luogu P2439 [SDOI2005]阶梯教室设备利用
    bzoj1559: [JSOI2009]密码
    bzoj3172: [Tjoi2013]单词
    后缀树简短实现
    [APIO2010]特别行动队 --- 斜率优化DP
    [APIO2014]序列分割 --- 斜率优化DP
    [HNOI2012]集合选数 --- 状压DP
    UVA11107 Life Forms --- 后缀数组
    [TJOI2017]DNA --- 后缀数组
    [NOI2014]购票 --- 斜率优化 + 树形DP + 数据结构
  • 原文地址:https://www.cnblogs.com/wenson/p/3329926.html
Copyright © 2020-2023  润新知