Я создаю веб-сайт, который требует от пользователей присоединиться к рефереру. Структура данных должна быть двоичной, поэтому, если у реферера уже есть два дочерних элемента в своем непосредственном нижнем уровне, то упомянутый новый пользователь должен быть помечен под одним из пользователей под ссылкой для реферера, предпочтительно, чтобы первый пользователь был отправлен чтобы они не имели более двух пользователей непосредственно под ними. Я строю эту систему с помощью codeigniter, и мой код похож на этот
public function get_referred_by($refer_id)
{
$where = array('referral_id' => $refer_id);
$parent = $this->get_by($where, true);
$children = $this->db->select('referral_id')
->where('refer_id', $parent->referral_id)
->order_by('users.id desc')
->limit('2')
->get('users')->result();
if(count($children) > 1)
{
for($i = 0; $i<count($children); $i++)
{
$parent = $this->get_referred_by($children[$i]->referral_id);
}
}
return $parent;
}
проблема в том, что с помощью этого кода я могу пропустить нижние линии, чтобы найти следующий открытый слот, но вместо того, чтобы сначала переходить по нижестоянию, чтобы проверить, есть ли у следующего пользователя свободные слоты, система застревает на одном дереве. например, пользователь A присоединяется к пользователям B и C, а затем B присоединяется к D и E, то, что я хочу, - это когда используется идентификатор пользователя как 'ref id, вместо того, чтобы возвращать номер пользователя Ds', он возвращает пользователя Cs '. Пожалуйста помоги
Если вы всегда хотите выбрать более раннего (левого) ребенка, тогда нет необходимости перебирать детей, просто выберите первый:
if(count($children) > 1)
{
$parent = $parent = $this->get_referred_by($children[0]->referral_id);
}
count($children) > 1
?