ホームページ  >  記事  >  バックエンド開発  >  再帰呼び出しに関連する問題

再帰呼び出しに関連する問題

WBOY
WBOYオリジナル
2016-06-13 13:40:23851ブラウズ

再帰呼び出しの問題、オンラインで待機中

PHP コード
<!--

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はパラメータ内にあり(ただし呼び出しでは使用されません)、グローバルなので、少し不適切だと思われます。
------解決策---------
show_child($v['pid' ] );
の場合は外で試してください
-----解決策---------
5階で続けるのはやめろということですか?再帰的ですか?
そうであれば、このように実現できます。
もし私の理解が間違っていたら、一度もここに来たことがないふりをしてください。

PHP コード

関数 show_child($pid,$layer=0)
{
    if($layer <font color="#e78608">------解決策----------------------</font><br>自分に何か問題があるかどうかを他の人に尋ねようと考えないでください。問題なら、あなたが解決します 問題を解決するのに最適な人 <br>あなたが遭遇したすべての問題を解決できる、最も完全な php チュートリアル ppt のセットを差し上げます <br>あなたがそうだと信じてください問題解決の達人 http://http://www.itkanba.com/bbs/viewthread.php?tid=9508&extra=
<br><br>------解決策---------<font color="#e78608"></font><br>PHP コード
関数 show_child($pid,$layer=0) { グローバル $db,$reply_arr,$layers,$circle_reply,$fid; if($layer >= 5)//再帰レイヤーの数 { 戻り値 } $layer++; foreach($reply_arr as $k => $v) { if($v['reply'] == $pid) { echo $v['message'].'|'.$v['pid'].'
'; show_child($v['pid'], 7); // ここで、このループを停止したいとします。 // 5 より大きい 2 番目のパラメータを追加します。 } }
<div class="clear"></div>
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。