如何在PHP中一周中的几天内轮换不同的数据

时间:2012-07-05 06:22:03

标签: php

我正在开展一个项目,我必须每天分发不同的广告,广告以数组的形式出现:

$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中工作。请帮助我改进这个概念

1 个答案:

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