无限级分类问题,紧急!!在线等
大家看看这里,我已经写在这里了
http://www.phpchina.com/bbs/thread-38067-1-1.html有个人这样说
很简单,在“while($row = $result->fetch_assoc())”的迭代过程中再次使用mysql函数,导致$result的搜索缓存集更新了。
需要记住的是,PHP在全局变量和局部变量的区别跟.NET之类的OO语言不一样的。比如mysql函数涉及到的“mysql resource”都是全局变量。我就一次性的把数据读入到了一个二维数组里面,然后在递归,可以是还是不行,一递归就有问题,
下面是我改后的代码?[复制PHP代码] [ - ]PHP代码如下:
//列出所有的分类放到一个二维数组里面
 public function list_all_category()
 {
  $db=parent::dbconnect();
  $query="select * from news_category order by id desc";
  $result=$db->query($query);
  //数据表的建立,就是一个数组;
  $table=array();
  while($row=$result->fetch_assoc())
  {
   //把每个记录变成一个键值对的数组
   $arr=array('id'=>$row["id"],'categoryname'=>$row["categoryname"],'parentid'=>$row["parentid"],'layer'=>$row["layer"]);
   //然后把每个记录的数组加入到总的数组中去,形成一个虚拟的数据表;
   array_push($table,$arr);
  }
  return $table;
  /*
  /////////////////////////////////////////////test
  $count=sizeof($table);
  for($i=0;$i<$count;$i++)
  {
  $cate_arr=$table[$i];
  foreach($cate_arr as $key=>$value)
  {
  echo $value;
  echo " ";
  }
  echo "<br>";
  }
  */
 } public function list_category($parentid,$layer)
 {
  //echo "<option value=".$row["id"].">".$str.$row["categoryname"]."</option>";
  //获得整个分类表中的数据,放到一个数组里面;
  $table=$this->list_all_category();
  $count=sizeof($table);
  for($i=0;$i<$count;$i++)
  {
   $cate_arr=$table[$i];
   if($cate_arr)
   {
    if($cate_arr["parentid"]==$parentid)
    {
     echo "<option value=".$cate_arr["id"].">".$cate_arr["categoryname"]."</option>";
         list_category($cate_arr["id"],$cate_arr["layer"]+1);
    }
    
   }  } }