我正在开展一个项目,我必须每天分发不同的广告,广告以数组的形式出现:
$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中工作。请帮助我改进这个概念
答案 0 :(得分:2)
您当前的代码存在一些问题。首先,用逻辑:
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,所以它不适合这个。它没有记录月份或年份的整个日期 - 其范围仅为当前周。
您可以使用当月的日期[编辑 - 或者,当然还有一年中的某一天(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天,广告5显示。广告7显示在第7天。在第14天,广告2显示,因为它再次围绕广告周期开始。
至于如何确保用户之前没有看过广告,这是另一个问题,我建议你这样发布。这可能涉及某种cookie系统,除非用户登录,在这种情况下你可以跟踪服务器端的这类事情。