Maison  >  Article  >  développement back-end  >  递归调用有关问题

递归调用有关问题

WBOY
WBOYoriginal
2016-06-13 13:40:23847parcourir

递归调用问题,在线等

PHP code
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->function show_child($pid,$layer=0)
{
    global $db,$reply_arr,$layers,$circle_reply,$fid;
    if($layer >= 5)//递归层数
    {
        return;
    }
    $layer++;
    
    foreach($reply_arr as $k => $v)
    {
        if($v['reply'] == $pid)
        {
            $v['message'] = discuzcode($v['message'], $replya['smileyoff'], $replya['bbcodeoff'], $replya[
'htmlon'] & 1, 1, $forum['allowbbcode'], ($forum['allowimgcode'] && $showimages ? 1 : 0), $forum['allowhtml'], ($forum['jammer'] && $replya['authorid'] != $discuz_uid ? 1 : 0), 0, $replya['authorid'], $forum['allowmediacode'], $replya['pid']);
    
            echo $v['message'].'|'.$v['pid'].'<br>';
            show_child($v['pid']);
        }
    }
    
}

有这样一个函数,递归调用的,同时里面又有循环,可是递归之后,应该是由于$v被重新赋值的原因吧,循环就不再进行了。麻烦问高手们怎么解决?

------解决方案--------------------
试试加一句 reset($reply_arr)在循环前,
另外你那个$layer又在参数里(但是调用没用到),又global了,好像有点不妥
------解决方案--------------------
你把 show_child($v['pid']); 拿到if外面试试

------解决方案--------------------
你的意思是在第五层停止继续进行递归是不是?
如果是的话可以这么实现。
如果是我理解错了,就当我没有来过这里。

PHP code

function show_child($pid,$layer=0)
{
    if($layer \n";
        show_child($pid, ++$layer);
    }
    else {
        return false;
    }
}
<br><font color="#e78608">------解决方案--------------------</font><br>不要有问题就想到问人家 你就是解决问题的最佳人选啊  <br>送你一套 最完整的 php 教程 的 ppt 那里面 你可以解决你  <br>遇到的所有问题  <br>相信自己 自己就是解决问题的主人http://http://www.itkanba.com/bbs/viewthread.php?tid=9508&extra=
<br><font color="#e78608">------解决方案--------------------</font><br>
PHP code

function show_child($pid,$layer=0) { 
   global $db,$reply_arr,$layers,$circle_reply,$fid; 
   if($layer >= 5)//递归层数  
   { return; } $layer++; 

   foreach($reply_arr as $k => $v) { 
       if($v['reply'] == $pid) {
          echo $v['message'].'|'.$v['pid'].'<br>'; 
          show_child($v['pid'], 7); // here, you want to stop this loop , and
                                    // add the second parameter that is more than 5.
       } 
   } 
} <div class="clear">
                 
              
              
        
            </div>
Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn