求将一段递归代码改为非递归形式 你的 $class_arr 是什么样子的?贴出来看看 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 array(5) { [0]=> array(5) { [0]=> string(1) "1" [1]=> string(1) "0" [2]=> string(9) "顶级分类1" [3]=> string(1) "0" [4]=> string(1) "1" } [1]=> array(5) { [0]=> string(3) "713" [1]=> string(1) "0" [2]=> string(30) "顶级分类2" [3]=> string(1) "0" [4]=> string(1) "1" } [2]=> array(5) { [0]=> string(3) "716" [1]=> string(1) "0" [2]=> string(33) "一级子分类1" [3]=> string(3) "713" [4]=> string(1) "1" } [3]=> array(5) { [0]=> string(3) "718" [1]=> string(1) "0" [2]=> string(31) "顶级分类3" [3]=> string(1) "0" [4]=> string(1) "1" } [4]=> array(5) { [0]=> string(3) "721" [1]=> string(1) "0" [2]=> string(33) "二级子分类1" [3]=> string(3) "716" [4]=> string(1) "1" } } 是个二维数组,目前有五个一维数组。对每个一维数组来说,[0]是id,[2]是名称,[3]是父节点序号,其余的不重要。 怎么就不知道与人方便,与己方便的道理呢?消除递归就是用自己的堆栈,代替系统的堆栈$ar = array( array( "1", "0", "顶级分类1", "0", "1"), array("713", "0", "顶级分类2", "0", "1"), array("716", "0", "一级子分类1", "713", "1"), array("718", "0", "顶级分类3", "0", "1"), array("721", "0", "二级子分类1", "716", "1"),);$id = 713;delRecursive($id, $ar);func($id, $ar);function func($id, $class_arr){ if($id=="") $id=0; $st = array($id); do { $cnt = count($st); for($i=0;$i<count($class_arr);$i++){ if(in_array($id = $class_arr[$i][3], $st)){ $subid=$class_arr[$i][0]; if(! in_array($subid, $st)) { $st[] = $subid;echo "$id,$subid\n"; // $this->db->delete('tree', array('id' => $id));// $this->db->delete('tree', array('id' => $subid)); // delRecursive($subid,$class_arr); } } } }while($cnt < count($st));}function delRecursive($id, $class_arr){ if($id=="") $id=0; for($i=0;$i<count($class_arr);$i++){ if($class_arr[$i][3]==$id){ $subid=$class_arr[$i][0];// $this->db->delete('tree', array('id' => $id));// $this->db->delete('tree', array('id' => $subid)); echo "$id,$subid\n"; delRecursive($subid,$class_arr); } }} $st = array($id);do { $cnt = count($st); for($i=0;$i<count($class_arr);$i++){ if(in_array($class_arr[$i][3], $st)){ $subid=$class_arr[$i][0]; if(!in_array($subid, $st)) { $st[] = $subid; $this->DB_MT->delete('tree', array('id' => $id)); $this->DB_MT->delete('tree', array('id' => $subid)); } } }}while($cnt < count($st)); cakePHP多个应用的权限验证问题 大虾请进!!! 关于fgetcsv函数 谁有Zend Studio的注册序列号? 大家帮帮忙呀! 请教个查询的问题! 在自定义的函数中操作mysql数据库,为什么当数据库在本地时一切正常,而在远程时提示成功但实际什么都没改变呢? 我想找一个发送问题到信箱的那中简单的页面提交程序。我不知道提交按牛事件里应该怎么连接到一个PHP 在服务忙时,PHP进程被当起。 谁知道VBB的模板具体怎么设置,或者说谁有他的技术资料.望不吝赐窥. php如何在进入页面的时候自动刷新一次验证码 如何提交js插入行的数据
array( "1", "0", "顶级分类1", "0", "1"),
array("713", "0", "顶级分类2", "0", "1"),
array("716", "0", "一级子分类1", "713", "1"),
array("718", "0", "顶级分类3", "0", "1"),
array("721", "0", "二级子分类1", "716", "1"),
);$id = 713;
delRecursive($id, $ar);
func($id, $ar);function func($id, $class_arr)
{
if($id=="") $id=0;
$st = array($id);
do {
$cnt = count($st);
for($i=0;$i<count($class_arr);$i++){
if(in_array($id = $class_arr[$i][3], $st)){
$subid=$class_arr[$i][0];
if(! in_array($subid, $st)) {
$st[] = $subid;
echo "$id,$subid\n";
// $this->db->delete('tree', array('id' => $id));
// $this->db->delete('tree', array('id' => $subid));
// delRecursive($subid,$class_arr);
}
}
}
}while($cnt < count($st));
}function delRecursive($id, $class_arr)
{
if($id=="") $id=0;
for($i=0;$i<count($class_arr);$i++){
if($class_arr[$i][3]==$id){
$subid=$class_arr[$i][0];
// $this->db->delete('tree', array('id' => $id));
// $this->db->delete('tree', array('id' => $subid));
echo "$id,$subid\n";
delRecursive($subid,$class_arr);
}
}
}
$st = array($id);
do {
$cnt = count($st);
for($i=0;$i<count($class_arr);$i++){
if(in_array($class_arr[$i][3], $st)){
$subid=$class_arr[$i][0];
if(!in_array($subid, $st)) {
$st[] = $subid;
$this->DB_MT->delete('tree', array('id' => $id));
$this->DB_MT->delete('tree', array('id' => $subid));
}
}
}
}while($cnt < count($st));