无限级分类问题,紧急!!在线等
大家看看这里,我已经写在这里了
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);
}
} } }
大家看看这里,我已经写在这里了
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);
}
} } }
找了一个tree类,解决了问题,原理是这样的,先把,所有的数据放到一个数组中,然后对数组进行递归查询,排列,最后输出