这是我的表kindkind_fid为0的是主类别,子类的上一级类别在kind_fid里,
现在想要把这些类别分类输出,例如这样想到的就是select * from kind
取回结果集然后存入一个二维数组
然后再根据二维数组的键值循环输出但是实际操作不知道怎么弄~~能否给段代码参考一下~~谢谢

解决方案 »

  1.   


    <?php
    //数据库存连接串
    $query = $db->query("select * from kind where kind_fid=0 order by id desc");  // 查询记录集
    while($class_list=$db->fetch_array($query))
    {
    $g_id=$class_list["id"];
    $big_class=$class_list["kind_name"];

    $query2 = $db->query("select * from kind where kind_fid=".$g_id." order by id desc");  // 查询记录集
    while($sclass_list=$db->fetch_array($query2))
    {
    $small_class=$small_class.$sclass_list["kind_name"].'|';
    }
    echo $big_class.':'.$small_class;
    $small_class='';
    }
    ?>
      

  2.   

    <?php
    //数据库存连接串
    $query = $db->query("select * from kind order by kind_fid desc");  // 查询记录集
    while($row=$db->fetch_array($query))
    {
        $result[$row["kind_fid"]]=$row;
    }
    foreach($result as $k => $v){
        if(isset($result[$v["kind_fid"]])){
             $result[$v["kind_fid"]]["children"] [] = $v;
             unset[$result[$k]];
        }
    }
    print_r($result);
    ?>
    应该是这样吧 支持多级分类 只需查询一次数据库
    PS:代码没测试过 只是个想法
      

  3.   

    没测试就是有错。。第六行fid 应该是id
      

  4.   

    还有第10行应该是 = $result[$k];
      

  5.   

    为啥我测试却不行呢~~囧
    已经把相应的字段改成我的数据库字段~~~
    #2的输出是空白页面
    #3的输出是Notice: Undefined variable: result in C:\wamp\www\project\program\kindtest.php on line 8Notice: Undefined variable: result in C:\wamp\www\project\program\kindtest.php on line 14
      

  6.   


    <?php
    //数据库存连接串
    $query = $db->query("select * from kind order by kind_fid desc");  // 查询记录集
    while($row=$db->fetch_array($query))
    {
        $result[$row["fid"]][]=$row;
    }
    foreach($result as $k => $v){
        if(isset($result[$v["kind_fid"]])){
             $result[$v["kind_fid"]]["children"] [] = $result[$k];
             unset[$result[$k]];
        }
    }
    print_r($result);
    ?>重新发一遍 
      

  7.   

    我又错了。第六行    $result[$row["fid"]]=$row;
      

  8.   

    测试行了~~
    如果想要一开始说的那种输出效果数组该怎么输出呢Array ( [2] => Array ( [0] => 6 [kind_id] => 6 [1] => 2 [kind_fid] => 2 [2] => 小区园林 [kind_name] => 小区园林 [children] => Array ( [0] => Array ( [0] => 6 [kind_id] => 6 [1] => 2 [kind_fid] => 2 [2] => 小区园林 [kind_name] => 小区园林 ) ) ) [1] => Array ( [0] => 5 [kind_id] => 5 [1] => 1 [kind_fid] => 1 [2] => 卧室装修 [kind_name] => 卧室装修 [children] => Array ( [0] => Array ( [0] => 5 [kind_id] => 5 [1] => 1 [kind_fid] => 1 [2] => 卧室装修 [kind_name] => 卧室装修 ) ) ) [0] => Array ( [0] => 3 [kind_id] => 3 [1] => 0 [kind_fid] => 0 [2] => 工业设计 [kind_name] => 工业设计 [children] => Array ( [0] => Array ( [0] => 3 [kind_id] => 3 [1] => 0 [kind_fid] => 0 [2] => 工业设计 [kind_name] => 工业设计 ) ) ) ) 
    说实话看到这个数组有点晕
    还有就是大哥能否说说原理让我琢磨一下呢~~谢谢
      

  9.   

    排错之后现在测试行了
    但是$query2查询放在while循环里面
    这个不太可取因为面临着高并发
    很容易出现问题~~~~
    所以还是得想想一次查询放进数组里~~~再来进行分类输出
      

  10.   

    一次性全部取出,然后再数组里操作
    参考 http://bbs.csdn.net/topics/370094009
      

  11.   

    我的想法是取出的时候按 fid逆向排列 一般的情况下子分类在数据库里都在 父分类的后面 如果不是 那我这个就不行了 然后遍历数组 从上到下 直接付给父分类 
      

  12.   

    版主大哥那个一时半会没琢磨明白~~就先自己写了下面这个递归的
    版主能否解释一下你写的这个的33行这个if( $item[$pid] ) {      $t[$item[$pid]]['child'][$item[$id]] =& $t[$k];    }<?php
    require('conn.php');
    $query = mysql_query("select * from mission_kind order by kind_id desc");
    while($result=mysql_fetch_array($query))
    {
    $resultarr[]=array(
    "id"=>$result['kind_id'],
    "fid"=>$result['kind_fid'],
    "name"=>$result['kind_name']
    );
    }$tree=gettree($resultarr,0);
    print_r($tree);function gettree($data,$pId)
    { $tree = ''; 
    foreach($data as $k =>$v) 
    {    if($v['fid'] ==$pId)  
      {         //父亲找到儿子     
    $v['children']=gettree($data,$v['id']);
         
    $tree[] = $v;  
    }} return $tree; }
    ?>