我正在尝试创建一些东西,将检查日期,并根据今天的日期产生不同的变量结果。
这是我当前的代码:
<?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对象,但这是这个问题的次要主题。