2017-08-12 80 views
0

所以每个成员都有一个intro_id,代表引用成员的人的用户名。如果成员2被成员1转介,成员2s intro_id将为1.停止中间循环的PHP递归函数

我基本上是要“计数”每个裁判,多个级别的深度。第一级是直接引荐,第二级是第一级引用引荐的引荐。

到目前为止的代码:

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级裁判。但我也想从其他级别参考。

+0

已尝试从php.ini中扩展内存限制? – num8er

+1

请缩进您的代码。 –

+0

调试101:格式化您的代码。如果格式不正确,缩进等情况,请遵循您的代码非常粗糙。 –

回答

1

您的代码在无限循环中运行(或者至少在PHP截断之前),因为递归调用的时间没有限制。所以当你看到149或150时,很可能是因为你已经进入了148或149个关卡并且在根本功能上,你仍然处于第一个记录。

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