zoukankan      html  css  js  c++  java
  • PHP 无限极分类

    PHP无限极分类,多种方法|很简单,这里说的很详细,其它地方说的很不好懂

    (2013-11-13 21:37:58)
    标签: 

    无限极分类

    分类: PHP神话
       当你学习php无限极分类的时候,大家都觉得一个字“难”我也觉得很难,所以,现在都还在看,因为工作要用到,所以,就必须得研究研究。

       到网上一搜php无限极分类,很多,但好多都是一个,并且,写的很乱,代码很多,让我们怎么学习嘛,那些都不靠谱,还是自己捣鼓捣鼓无限极分类了。

    比如一个category表:有id, name, pid, sort 就这四个简单的字段,不要太复杂了。

    id    name          pid      sort
    1     PHP           0       1
    2     Javascript       0        2
    3     MySQL          0       3
    4     PHP类          1       1
    5     smarty         1        2
    6     私有方法        4        1
    7     jQuery         2        1

    代码:category.class.php

    class Category {
          static public function sortOut($cate,$pid=0,$level=0,$html='--'){
                   $tree = array();
                   foreach($cate as $v){
                           if($v['id'] == $pid){
                                   $v['level'] = $level + 1;
                                   $v['html'] = str_repeat($html, $level);
                                   $tree[] = $v;
                                   $tree = array_merge($tree, self::sortOut($cate,$v['id'],$level+1,$html));
                           }
                   }
                   return $tree;
          }
    }

    这里的$cate是查询上面表获取的一个二维数组:这里就不写了

    下面是效果:

    id    name              pid   level     sort
    1     PHP              0      1     1
    4       --php类          1      2     1
    6       ----私有方法        4      3      1
    5       --smarty          1      2     2
    2     Javascript           0      1     2
    7       --php类          2       2     1
    3     MySQL              0      1       3



    到此,我们就实现了最简单的php无限极分类了,这个在工作中用的很多的。

    ----------------------------------------------

    好像不需要array_merge

    function tree(&$list,$pid=0,$level=0,$html='--'){
        static $tree = array();
        foreach($list as $v){
            if($v['pid'] == $pid){
                $v['sort'] = $level;
                 $v['html'] = str_repeat($html,$level);
                $tree[] = $v;
                tree($list,$v['id'],$level+1);
            } 
        }
        return $tree;
    }

    大家知道分类多了,递归效率也就低了,所以,有了下面的算法:预排序遍历树算法进行无限分类
     
    1. function generateTree($items){
    2. $tree = array();
    3. foreach($items as $item){
    4. if(isset($items[$item['pid']])){
    5. $items[$item['pid']]['son'][] = &$items[$item['id']];
    6. }else{
    7. $tree[] = &$items[$item['id']];
    8. }
    9. }
    10. return $tree;
    11. }
    12. $items = array(
    13. 1 => array('id' => 1, 'pid' => 0, 'name' => '安徽省'),
    14. 2 => array('id' => 2, 'pid' => 0, 'name' => '浙江省'),
    15. 3 => array('id' => 3, 'pid' => 1, 'name' => '合肥市'),
    16. 4 => array('id' => 4, 'pid' => 3, 'name' => '长丰县'),
    17. 5 => array('id' => 5, 'pid' => 1, 'name' => '安庆市'),
    18. );
    19. print_r(generateTree($items));
  • 相关阅读:
    Iscroll滑动无效
    原生js 无缝滚动组件
    原生 js dialog弹窗组件
    html5 历史管理
    html5拖拽属性
    highcharts 数据图设置X轴间隔显示效果
    highcharts柱状图含有正负柱设置不同颜色的方法
    移动端滑动插件 swiper
    千分位添加和去掉方法
    dubbo常用类和路径
  • 原文地址:https://www.cnblogs.com/try-better-tomorrow/p/5419903.html
Copyright © 2011-2022 走看看