关于递归的应用,请各位指点一下

shuteer 2005-08-30 04:00:45
递归的函数(根据一个分类id,取得这个分类id下面所有的终极id):

function get_child_idarr($id)
{
global $db_prefix,$sql;
static $str=array();
$a=array();
$rs=$sql->query("SELECT id,rou_id FROM ".$db_prefix."prot_class WHERE `p_id`='$id'");
if($sql->num_rows($rs) > 0)
{
while($r=$sql->fetch_assoc($rs))
{
$p_id_num=explode(":",$r['rou_id']);
if(count($p_id_num)==3 AND 1 > $sql->num_rows($sql->query("SELECT id FROM ".$db_prefix."prot_class WHERE `p_id`=$r[id]")))
{
if(array_search($r['id'],$str)===null)
{
$str[]=$r['id'];
}
}
get_child_idarr($r['id']);
}
}else
{
$str[]=$id;
}
$a=$str;
unset($str);
return $a;
}

在任何一个单独的页面运行这个函数,没有问题,但是如果一个页面同时运行2,3...次,
以后每次的结果都会把前一次的结果带进来
第一次:65,66,67
第二次:65,66,67,54 (而如果单独在一个页面运行,只会有54出现,也是我要的结果)
问题就是怎么才能去掉第一次的结果?
...全文
125 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyonet 2005-08-31
  • 打赏
  • 举报
回复
楼主想让数据库服务器瘫痪?
xuzuning 2005-08-31
  • 打赏
  • 举报
回复
函数中有
static $str=array();

unset($str);

但是请注意:静态变量是不会被unset删除的,也就是说一旦声明了静态变量,那么他将一直存在直到程序结束
你只需把
unset($str);
改成
$str=array();
就可以了
hackfan 2005-08-31
  • 打赏
  • 举报
回复
多么可爱的函数啊。哈哈哈阿
lee3f 2005-08-30
  • 打赏
  • 举报
回复
不知道是否楼主所想要的
function get_child_idarr($id, $isFrist=false)
{
global $db_prefix,$sql;
static $str=array();
if ($isFrist) empty($str);
$a=array();
$rs=$sql->query("SELECT id,rou_id FROM ".$db_prefix."prot_class WHERE `p_id`='$id'");
if($sql->num_rows($rs) > 0)
{
while($r=$sql->fetch_assoc($rs))
{
$p_id_num=explode(":",$r['rou_id']);
if(count($p_id_num)==3 AND 1 > $sql->num_rows($sql->query("SELECT id FROM ".$db_prefix."prot_class WHERE `p_id`=$r[id]")))
{
if(array_search($r['id'],$str)===null)
{
$str[]=$r['id'];
}
}
get_child_idarr($r['id']);
}
}else
{
$str[]=$id;
}
$a=$str;
unset($str);
return $a;
}
-神仙- 2005-08-30
  • 打赏
  • 举报
回复
找一个好一点的算法吧
这个太慢了
shuteer 2005-08-30
  • 打赏
  • 举报
回复
这就是一个无限级分类的应用,根据任何一个id,取得下面最终分类的id数组.
jimmyzhan 2005-08-30
  • 打赏
  • 举报
回复
能把问题说清楚一点吗????
你现在从某个页面掏一个函数出来,id,又终极id??
你说的表存储着什么? 字段如何??? 你都没有说清楚.
让人看起来一头雾水
wood23 2005-08-30
  • 打赏
  • 举报
回复
递归?汗一把,试过好几次写递归都失败了。

不过把前一次结果带进来,估计是unset(变量)没设或位置没对吧。

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧