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[id],$row[f_id],$row[name]);    //每一行保存一个分类的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][1]==$f_id){         //$arr[$i][1]表示第$i+1个分类的f_id的值。开始$f_id=0,也就是把f_id=0的分类输出来。 
                 echo $arr[$i][2]."<br>"; //$arr[$i][1]表示第$i+1个分类的name的值。 
            fenlei($arr[$i][0]);   //$arr[$i][1]表示第$i+1个分类的id的值。进行递归,也就是把自己的id作为f_id参数把自己的子类再循环出来。 


}

fenlei($f_id=1);
fenlei($f_id=0);
?> 

你可能感兴趣的:(mysql,PHP)