所以每个成员都有一个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级参考。但我也希望其他级别的参考。
答案 0 :(得分:1)
您的代码在无限循环中运行(或至少在PHP将其关闭之前),因为对递归调用的时间没有限制。因此,当你看到149或150时,可能是因为你已经达到了148或149级,并且在根函数中,你仍然是第一个记录。
如果您只对n级深度感兴趣,请提供n
作为参数,并在每次进行递归调用时递增它。在函数中,检查n > $maxLevels
是否立即返回。