使用当前的日期显示tweets的旋转


Show rotation of tweets using current day of month

我正在尝试创建一些东西,将检查日期,并根据今天的日期产生不同的变量结果。

这是我当前的代码:

<?php 
for($i = 0; $i <= 25; $i++) 
    $dates[] = date("d", strtotime( "+$i days"));
foreach ($dates as $today) {
    if (in_array($today, array('01', '05', '09', '14', '19', '24'), true)) {
        $tweet = "one";
    }
    if (in_array($today, array('02', '06', '10', '15', '20', '25'), true)) {
        $tweet = "two";
    }
    if (in_array($today, array('03', '07', '11', '16', '21'), true)) {
        $tweet = "three";
    }
    if (in_array($today, array('04', '08', '12', '17', '22'), true)) {
        $tweet = "four";
    }
}
echo $tweet;
?>

问题是,即使日期改变了,它总是显示"4",我错过了什么?

因为您在循环的每次迭代中都覆盖了$tweet,这意味着只有最后一次迭代才是真正可用的。最后一次迭代将在今天+ 25天,也就是12月12日。

12将$tweet赋值给four,因为这是最后一次迭代,所以在循环结束后,$tweet就等于这个值。

使用一组in_array()调用是一种缺乏创造力的方法,当然不是D.R.Y.

声明一个查找数组,并对当前日的值执行简单的模数计算。当将天数除以4时,第1、5、9、13天等将返回1;第2、6、10、14天等将返回2;第3、7、11、15天等将返回3;第4、8、12、16天等将返回0(因为在计算中没有余数)。

然后可以使用该返回值访问对应于该键的查找值。这是一个更专业的方法。

代码(演示):

$tweetLookup = [
    'Four',
    'One',
    'Two',
    'Three',
];
for ($i = 0; $i <= 25; $i++) {
    echo $i . ": " . $tweetLookup[date("d", strtotime( "+$i days")) % 4];
    echo "'n";
}
输出:

0: One
1: Two
2: Three
3: Four
4: One
5: Two
6: Three
7: Four
8: One
9: Two
10: One
11: Two
12: Three
13: Four
14: One
15: Two
16: Three
17: Four
18: One
19: Two
20: Three
21: Four
22: One
23: Two
24: Three
25: Four

为了使代码更加动态,将硬编码的4替换为count($tweetLookup)。这将使您能够仅通过操作数据源来管理脚本行为——您永远不需要触及处理逻辑。

注:我建议使用DateTime对象,但这是这个问题的次要主题。