0

我正在做一个项目,我必须每天分发不同的广告,数组形式的广告是:

$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 的初学者。请帮助我改进这个概念

4

1 回答 1

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 系统,除非用户已登录,在这种情况下,您可以在服务器端跟踪此类事情。

于 2012-07-05T08:19:20.773 回答