昨天大青年写了一个
http://expert.csdn.net/Expert/topic/2976/2976131.xml?temp=.2451441
<?php$data = array(array('id'=>1, name=>'name1', 'pid'=>0),
              array('id'=>2, name=>'name1', 'pid'=>1),
              array('id'=>3, name=>'name1', 'pid'=>0),
              array('id'=>4, name=>'name1', 'pid'=>3),
              array('id'=>5, name=>'name1', 'pid'=>0),
              array('id'=>6, name=>'name1', 'pid'=>2),
              array('id'=>7, name=>'name1', 'pid'=>6),
              array('id'=>8, name=>'name1', 'pid'=>4),
              array('id'=>9, name=>'name1', 'pid'=>7)
);
$level = $result = array();
foreach($data as $value){
$level[$value['pid']][$value['id']] = 'END';
}
$result = $level[0];
doLevel($level, $result);function doLevel(&$level,&$result){
   foreach($result as $key=>$value){
      if(isset($level[$key])){
       $result[$key] = $level[$key];
       doLevel(&$level, &$result[$key]);
      }
  }
}
echo "<pre>"; print_R($result);?>
整个代码分为几个部分:
第一步从数据库中选出所有的分类
上面的例子中($data是我从数据库中选出来的分类的结果集),第二步通过循环制作一个数据等级二维数组。第三步通过递归函数生成一个用分类的id值作为键值的多位数组,这个数组就是最后的等技数组。第四步打印出来结果集。结果有两个部分可以用
$data存储分类信息。
$result存储等级信息。------------------------------------------------------------
如果你是从数据库选。可以把$data的负值语句删了,
把foreach($data as $value)改成
foreach($value = $this->db->fetch_array($query))就可以了
具体的事例如下:<?php$sqlCategory = "SELECT * FROM catogory";
$query = $this->db->query($sqlCategory);
$level = $result = array();
foreach($value = $this->db->fetch_array($query)){
$level[$value['pid']][$value['id']] = 'END';
}
$result = $level[0];
doLevel($level, $result);function doLevel(&$level,&$result){
   foreach($result as $key=>$value){
      if(isset($level[$key])){
       $result[$key] = $level[$key];
       doLevel(&$level, &$result[$key]);
      }
  }
}
echo "<pre>"; print_R($result);?>

解决方案 »

  1.   

    用两个页面可以完成i.php (跟a.php的开头部分$file一致)
    -------------------------------------------------
    <?php
    //根据key来得到其下的类别
    $column["A"]=array("A1");
    $column["AA"]=array("A2");
    $column["AB"]=array("A3");
    $column["ABA"]=array("A4");
    $column["ABB"]=array("A5");
    $column["ABC"]=array("A5");
    $column["ABBD"]=array("A5");
    $column["AC"]=array("A6");
    $column["ACA"]=array("A7");
    $column["ACAA"]=array("A8");
    $column["ACAAB"]=array("A9");$keys=array_keys($column);$key=$_GET["key"];$arr=preg_grep("/^$key.{1}$/",$keys);$str="";
    foreach($arr as $val){
          //判断是否有子节点
          $sub=preg_grep("/^$val.{1}$/",$keys);
          $node=(empty($sub))?"-":"+";
          //缩进
          $indent=str_repeat("&nbsp;",strlen($val));      $str.="<br><span onClick=openkey(\"$val\",\"$indent\") id=o$val>$indent$node$val</span><span id=\"t$val\"></span>";
    }
    ?>
    document.all.t<?=$key?>.innerHTML='<?=$str?>';
    a.php(任意)
    ---------------------------------------------------
    <script language="javascript">
    var $file="i.php";function openkey($key,$indent){
    var $okey="o"+$key;
    var $tkey="t"+$key;
    var $doc=document.getElementById('frame').src;
    var $k=document.all($okey).innerHTML; if($k.match(/\+/)){
        $doc=$file+"?key="+$key;
    document.all($okey).innerHTML=$indent+"-"+$key;
    }
    else{
    $doc="";
            document.all($okey).innerHTML=$indent+"+"+$key;
    document.all($tkey).innerHTML="";
        } document.getElementById('frame').src=$doc;
    }</script><body topmargin="0" leftmargin="0">
    <span onClick="openkey('A','')" id="oA">+A</span><span id="tA"></span><br>
    <script language="javascript" src="" id="frame"></script>