付潭

淡泊高远,方圆之道。 助人扶危,处世之本。 修身养性,长乐之方。 好学勤勉,成就之功。

导航

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 />";               //
}

 

posted on 2012-12-11 10:52  付潭  阅读(4802)  评论(0编辑  收藏  举报