PHP递归函数停止中循环

时间:2017-08-12 21:45:39

标签: php sql

所以每个成员都有一个intro_id,它代表引用该成员的人的用户ID。如果成员2由成员1引用,则成员2s intro_id将为1.

我基本上是想"算上"每个参考,多层深。第一级是直接推荐,第二级是第一级引用推荐的推荐。

到目前为止

代码:

function countReferrals($userid, $i){
    if($userid=='')
    {
       $userid=$_SESSION['member_id'];
    }
    if($i=='' || empty($i))
    {
       $i=0;
    }

    $query1 = new Bin_Query();
    $sql = "select member_id from members where intro_id='".$userid."'";
    $query1->executeQuery($sql);
    $level1Refs = $query1->records;

    foreach($level1Refs as $refer)
    {
       $i=$i+1;
       echo "<script>console.log( 'Debug Objects | countReferrals | \$i = ".$i." | \$refer[member_id] = ".$refer['member_id']."  ' );</script>";
       self::countReferrals($refer['member_id'], $i);
    }
}

这个最大输出数量($ i)大约是150.有时149,146,......第一级推荐是400+而一些是二级。所以它在计算每一个参考之前都会明显停止,但为什么呢?

如果我删除

self::countReferrals($refer['member_id'], $i);

它统计所有1级参考。但我也希望其他级别的参考。

1 个答案:

答案 0 :(得分:1)

您的代码在无限循环中运行(或至少在PHP将其关闭之前),因为对递归调用的时间没有限制。因此,当你看到149或150时,可能是因为你已经达到了148或149级,并且在根函数中,你仍然是第一个记录。

如果您只对n级深度感兴趣,请提供n作为参数,并在每次进行递归调用时递增它。在函数中,检查n > $maxLevels是否立即返回。