Не уверен, что мой заголовок точно объясняет, что я пытаюсь сделать, но вот мой пример использования:
У меня есть база данных идентификаторов 1 = n
, назовем это 500 записей.
Я хочу сначала получить номер недели в PHP $week = date('W')
, поэтому на этой неделе 48
.
Затем я хочу вернуть 3 уникальных идентификатора, которые всегда будут возвращать один и тот же идентификатор для этой недели.Например,
Week 1 = Id's 1,2,3
Week 2 = Id's 4,5,6
Week 3 = Id's 7,8,9
Week 4 = Id's 10,11,12
Week 5 = Id's 13,14,15
Week 6 = Id's 16,17,18
И т. Д.
Мой подход состоял в том, чтобы начать с недели 1, указав 3 идентификатора, затем умножить неделю на 2 для второй недели, затем каждыйна следующей неделе продолжайте умножать на 2 и добавлять $i = 1
каждую неделю, увеличивая $i++
каждую неделю и выбирая следующие 3 идентификатора из начального номера.Мое решение, приведенное ниже, похоже, работает, но оно выглядит как-то странно.
$weeks = array(1,2,3,4,5,6,7);
$output_arr = array();
$ids_arr = array();
$id1 = 1;
$id2 = $id1 + 1;
$id3 = $id1 + 2;
$i = -1;
foreach ($weeks as $week) {
if ($week == 1) {
$ids = array($id1, $id2, $id3);
$ids = implode(', ', $ids);
} else {
$id1 = $week * 2 + $i;
$id2 = $id1 + 1;
$id3 = $id1 + 2;
$ids = array($id1, $id2, $id3);
$ids = implode(', ', $ids);
}
$output_arr[$week] = $ids;
$i++;
}
Итак, мой конечный результат:
$output_arr = Array ( [1] => 1, 2, 3 [2] => 4, 5, 6 [3] => 7, 8, 9 [4] => 10, 11, 12 [5] => 13, 14, 15 [6] => 16, 17, 18 [7] => 19, 20, 21 )
Это то, что я хочу, но есть ли более простой и понятный способ?И, BONUS HELP NEEDED
было бы намного лучше, если бы он мог обрабатывать таблицу с непоследовательными идентификаторами.В моем случае мой идентификатор должен быть последовательным, если у меня будет разрыв в EX идентификатора: 1,2,3,4,6,7,8,10
, это может испортить выходной массив.
Спасибо за помощь.