• PHP函数之无极分类


      无极分类属于现在比较难攻克的一关,现在就把代码贴出来,有需要的朋友可以根据实际需要扩展一下。

      //假设分类关系为“ 地球”(id为1,父id为0),“国家”(id为2,父id为1),“省份”(id为5,父id为2),城市(id为9,父id为5),地区(id为14,父id为9)

    <?php
    //获取子分类
    function getChildId($parentid=0)      //形参传入父id,方便抓取子分类数组。
    {
        mysql_connect("localhost","root","");  
        mysql_query("set names utf8");
        $sql="select * from `category` where parentid='{$parentid}' limit 100"; //从数据表 ·分类· 中,根据父id的值抓取一组子分类。默认值为0,故抓取到的为地球。
        $result=mysql_query($sql);
        $results=array();                          //声明一个空数组,方便装入子分类。
        while($child=mysql_fetch_assoc($result))              //通过while循环抓取返回给$child
        {
            $results[]=$child;                               //把子分类组里的数据插入到$results这个数组中
        }
        return $results;                                     //把结果返回给函数,默认为一个包含地球的组。
    }

    //函数getChildId()返回的是子分类数组


    function getTree($parentid=0,$treeArray=array())
    {
        $child = getChild($parentid);                      //返回的是形参输入的父id下面的子分类组,默认为一个包含国家的组。
        foreach($child as $baby)                        //$baby此时为一个一个的国家
        {
            $treeArray[]=$baby;                       //将默认传入的一个空数组装入子分类的数据,首先转入的为地球。 
            $treeArray = getTree($baby['id'],$treeArray);           //函数回调,形成一个循环。当$child的值为0时,即父id下面没有子分类时。跳过foreach语句,直接执行下一句
            
        }
        return $treeArray;                          //return装着子分类的数组,返回给函数,
    }
    //运行函数 返回$treeArray;
    $tree = getTree();
    var_dump($tree);
    ?>

      下面再来看一段新的代码:


    header('Content-Type:text/html;charset=utf-8');     //告诉浏览器用utf-8编码阅读

    mysql_connect("localhost","root","");
    mysql_select_db("cms4");
    mysql_query("set names utf8");

    function getList($pid = 0)                 //抓取子分类的函数
    {
        //按新闻分类表的  父id查找 子分类列表
        $sql = "select * from news_categorys where pid = '{$pid}' limit 100";
        $query = mysql_query($sql);
        if(!$query)
        {
            //有错报错
            die(mysql_error());
        }
        $lists = array();
        //在结果集里取一行
        while($row = mysql_fetch_assoc($query))
        {
            $lists[] = $row;
        }
        return $lists;
    }

    //获得所有分类的数组


    function getTree($pid = 0,$typeTree = array(),$level = 0)

    {

        $list = getList($pid);            //获取默认父id为0的子分类

      var_dump($list);              //将子分类输出
                              
        foreach($list as $l)

    {                        //当$list是空数组时,foreach不会执行
            
         $levelStr = '<font color="red">';
         for($i=0;$i<$level;$i++)

      {
           $levelStr.='|-';
      }
              $levelStr .= '</font>';                //$levelStr = $levelStr.'</font>'
              $l['name'] = $levelStr.$l['name'];
              $typeTree[] = $l;
     
            //逐层深入递归
            $typeTree = getTree($l['id'],$typeTree,$level+1);    //获取下一级分类
                                        //$level 指子分类层级
        }
        return $typeTree;
    }
    $tree = getTree();                    //将所有父和子分类赋值给$tree
    //var_dump($tree);


    foreach ($tree as $v)              
    {
        echo $v["name"]."<br />";               //
    }

  • 相关阅读:
    Delphi集合的用法
    文字倒序输出(集合)
    如果知道两点的经纬度 如何算两点之间的距离
    Arcengine 开发完后,程序打包,在目标机器上不能使用 已解决
    arcengine License部署
    设置代理
    关于GPS坐标转换的学习笔记相当头疼
    ArcEngine 相关转载
    经纬度到平面坐标的相互转换
    用ArcEngine9.3开发GIS应用程序图层符号化解决方案
  • 原文地址:https://www.cnblogs.com/futan/p/php_wujicategory.html
Copyright © 2020-2023  润新知