Я работаю над проектом, в котором я должен распространять разные объявления в день, объявление в форме массива:
$ad = array( 'attribute1_value' => "12", 'attribute2_value' => "xyz", 'attribute3_value' => 'http://example.com', 'attribute4_value' => 'data');
Логику, которую я использую с корпусом коммутатора:
$day = date('w',time()); switch ($day) { case '0': if($day == '0') { $count = 0; echo $ad; $count++; } else { $count = 7; echo $ad; } break; case '1': if($day == '1') { $count = 1; echo $ad; $count++; } else { $count = 8; echo $ad; } break;
Проблема в том, что если у меня есть ~ 15 объявлений, тогда я хочу распространять выходные данные в день / день, дату ('w') на сегодняшний день, но после 7-го дня, т.е. субботу, в воскресенье, номер объявления 8 начинается. Я должен реализовать этот сценарий, используя функцию даты. Также я должен отправить объявление тем пользователям, которые раньше не испытывали это объявление. Я не эксперт в php, как новичок, работающий в php / mysql. Пожалуйста, помогите мне улучшить эту концепцию
В вашем текущем коде есть некоторые проблемы. Во-первых, с логикой:
case '0': //<!-- ensures the following code executes only where $day == 0 if($day == '0') { //<!-- therefore this will run $count = 0; echo $ad; $count++; } else { //<!-- but this can never run $count = 7; echo $ad; }
Кроме того, вы выбрали $ads
, который представляет собой массив. Вам нужно выделить элемент из массива.
Если вы хотите, чтобы один понедельник пользовался объявлением 1 и в следующий понедельник для использования объявления 8, date('w')
не будет очень полезной, так как это просто циклически продолжается от 0 до 6, поэтому для этого это не подходит. Он не имеет памяти об общем номере дня месяца или года – его объем – только текущая неделя.
Вместо этого вы можете использовать день месяца [edit – или, конечно, день года ( date('z')
). См. Комментарий внизу).
$day = date('d'); $ads = array('ad 1', 'ad 2', 'ad 3', 'ad 4', 'ad 5', 'ad 6', 'ad 7', 'ad 8', 'ad 9', 'ad 10', 'ad 11', 'ad 12'); echo $ads[($day - 1) % count($ads)];
Итак, в пятый день месяца показано объявление 5. На 7-й день показано объявление 7. На 14-й день, как показано на рисунке 2, он снова начинает цикл рекламы.
Что касается того, как обеспечить, чтобы пользователь не видел объявление раньше, это еще один вопрос, и я предлагаю вам опубликовать его как таковой. Предположительно, это предполагает наличие какой-либо системы cookie, если только пользователи не вошли в систему, и в этом случае вы могли бы отслеживать эту вещь на стороне сервера.