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));
  • 相关阅读:
    风云受邀参加CMAX2009技术峰会演讲嘉宾
    银光志—Silverlight 3.0技术详解与最佳实践上架中文亚马逊卓越网和当当网
    Silverlight进度条控件动画源代码
    Silverlight4 Tools下载
    在C#代码中获取Silverlight的初始化initparams参数
    css层的定位position、absolute、relative层叠加的五条叠加法则
    《银光志—Silverlight3.0技术详解与最佳实践》仅上架两周排名互动出版网第三名
    《银光志Silverlight 3.0开发详解与最佳实践》出版电子版——风云编著
    银客帝国招聘Silverlight兼职开发人员
    Silverlight 2使用C#遍历XML(兼容Silverlight3)
  • 原文地址:https://www.cnblogs.com/try-better-tomorrow/p/5419903.html
Copyright © 2011-2022 走看看