PHP邻接列表(父子)循环

时间:2016-10-06 05:49:02

标签: php

所以我正在研究referall系统,

假设有一个名为User A的父母。用户A邀请2个用户,用户B和C.

  • 用户B购买了2件商品
  • 用户C购买了4件商品
  • 1级总计= 6项。

然后用户B邀请用户B1和B2,然后用户C邀请C1和C2。

  • 用户B1购买了1件商品
  • 用户B2购买了1件商品
  • 用户C1买了2项
  • 用户C2购买了1件商品
  • 2级总计= 4项

等等。

该级别定义受邀用户的“批次”。

我只能找到第一级总项目。这是我的代码(我正在使用CI)

$user_children = $this->_model->all(' AND referral_id = '.$id);
    if(count($user_children) > 0){
        foreach($user_children as $child){
            array_push($users,$child); 
        }
    }        

我无法遍历孙子孙女。

如何编写一个能够返回每个级别购买的总项目的函数?已经处理了很长一段时间。有人能帮助我吗?谢谢你:))

1 个答案:

答案 0 :(得分:0)

您可以构建一个递归函数来计算您的值:

function calc_level($id,$level_array){
   $user_children = $this->_model->all(' AND referral_id = '.$id);
    if(count($user_children) > 0){
        foreach($user_children as $child){
            $level_array[$child->id] = $level_array[$child->id] + $child->items_bought; 
            $level_array = calc_level($child->id,$level_array);
        }
    } 
    return $level_array;    
}

假设' id '和' items_bought '是数据库列的名称。

并且这样打电话:

$level_array = array();
$level_array = calc_level('id_of_first_level',$level_array);

它将返回一个数组,其中您的等级ID为索引,总数为值。

我不确定这是否是在CI中实施的正确方法。