天成1 发表于 2017-4-4 10:04:19

PHP无限分类详细设置教程一

<?php
header("Content-type:text/html;charset=utf-8");   
$db=new mysqli("www.xz768.com","root","","music") ; //实例化一个数据库连接。使用这个前一定要确保已经加载了mysqli类库,或者用mysql_connect这个方式连接。   
if(mysqli_connect_errno()){
    echo "链接失败:".mysqli_connect_error();
    exit(); }   
$db->query("set names utf8");
$result=$db->query("select name from class where f_id=0"); //查找f_id=0的分类,也就是查找每一个大类。
while($row=$result->fetch_assoc()){
    //echo $row['name']."<br>";      //这样就把每个大类循环出来了。
}
//同样我们可以把新闻的子类循环出来。
$result=$db->query("select * from class where f_id=1"); //查找f_id=1的分类,也就是查找‘新闻’的子类。
while($row=$result->fetch_assoc()){
    //echo $row['name']."";      //这样就把‘新闻’的子类循环出来了。注意:只是子类,不包括孙子类。
}
//写到这里,我们会发现一个问题,如果这个分类是10级分类,难道我们要写10个循环把它每个子类循环出来?如果是更多级分类呢,这样写显然是不现实的。
//那又有什么办法解决呢?我们可以写一个递归的函数,把f_id作为参数传入,不断循环每一个f_id的值,也就是说把每一个f_id值的子类循环出来。
//首先我们把各个分类的值保存在一个二维数组中,在下面的递归函数里有用。
$result=$db->query("select * from class");
while($row=$result->fetch_assoc()){
   $arr[]=array($row,$row,$row);    //每一行保存一个分类的id,f_id,name的信息。
}
function fenlei($f_id=0){   //$f_id初始化为0,也就是从最大分类开始循环.
    global $arr;   //声明$arr为全局变量才可在函数里引用。
    for($i=0;$i<count($arr);$i++){       //对每个分类进行循环。
         if($arr[$i]==$f_id){         //$arr[$i]表示第$i+1个分类的f_id的值。开始$f_id=0,也就是把f_id=0的分类输出来。
               echo $arr[$i]."<br>"; //$arr[$i]表示第$i+1个分类的name的值。
            fenlei($arr[$i]);   //$arr[$i]表示第$i+1个分类的id的值。进行递归,也就是把自己的id作为f_id参数把自己的子类再循环出来。
}
}
}

fenlei($f_id=1);
fenlei($f_id=0);
?>
页: [1]
查看完整版本: PHP无限分类详细设置教程一