if ($i > 27) { break; } } while (strtotime($nday) < $TODAY_TIME) { $tnday = $nday; // Берем состояние каталога на конкретный день, начиная с -28-го дня от завтрашнего числа. Состояние -- то есть, самых подходящих людей, // имеющих ПРО в этот день (целый день) и той же специализации, что и юзер. В лучшем случае их будет 5, в худшем 0. // Если 0, то идем дальше, иначе запоминаем спец массив $prev27[], индексирванный датами дней. // Член массива -- это массив из тех самых подходящих людей, по ним потом будем определять // посещаемость. // Берем всех людей той же специализации и имеющих ПРО в этот день. // Если у человека уже есть ПРО, то "C" скорее всего и будет им самим. Считается нормальным. if ($pro_days[$nday] && ($neighbours = promotion::GetProCatalogByDay($u_spec, $nday))) { // Выбираем среди них самых подходящих. if ($ngbs = promotion::GetNeighbours($neighbours, $u_pro_rating)) { if (!($ngbs['A'] && $ngbs['E'])) { $ngbs['A'] = $ngbs['E'] = NULL; } if (!($ngbs['B'] && $ngbs['D'])) { $ngbs['B'] = $ngbs['D'] = NULL; } // Находим день где у кого-то из выбранных людей кончается ПРО раньше, чем у остальных. // До этого дня мы можем использовать посещаемость всех выбранных юзеров, а // в этот день и после него придется получать новый список людей. // Если у кого-то ПРО обрывается посреди дня, то берем данные до, но не включая этот день. // Потом ищем снова соседей, у который в этот день (целый день) был ПРО. $min_pro_to = $TODAY_TIME; if ($ngbs['A'] && ($t = strtotime($ngbs['A']['pro_to'])) < $min_pro_to) { $min_pro_to = $t; }