我正在尝试使用一个开关来根据日期更改文本/图像,但是由于某种原因,我实际上必须echo $current_date;
,否则我的开关似乎无法获取该值? / p>
$start_date = '2018-10-15';
$end_date = '2018-10-27';
$current_date = date('Y-m-d');
echo $current_date;
while (strtotime($start_date) <= strtotime($end_date)) {
switch($current_date) {
case "2018-10-15":
$text = 'todays text';
$image = 'https://www.image.com';
break;
case "2018-10-16":
$text = 'todays text2';
$image = 'https://www.image.com2';
break;
}
}
echo $text;
https://repl.it/repls/EthicalJuicyLocks
从上面的REPL中可以看到。有什么方法可以将$current_date
的值传递给开关而无需调用它?
答案 0 :(得分:2)
您的问题不是回显日期,因为它绝对不会影响切换。
问题是您的while循环永远不会结束($start_date
和$end_date
是静态的,因此start_date
始终小于或等于$end_date
)
这样,您永无休止的while循环会阻止任何输出发送到stdout。预先回显日期只会给您一种幻想,即某些事情起作用或不起作用,但这只是一种幻想。
防止无限循环很重要。您应该始终放置一些控件以防止循环消失。它可以是一个计数器,在经过指定的迭代次数后停止,在下一次迭代之后放置一个停止,结果的变化小于给定的阈值,等等。
如果当前日期在开始日期和结束日期之间,如果您只想输入部分代码,则可以使用两段式如果
if ($current_date >= $start_date && $current_date <= $end_date)
{
// Do whatever you need when you are between the boundary dates
}
用这个代替那一刻,让我知道
答案 1 :(得分:0)
while (strtotime($start_date) <= strtotime($end_date))
这是一个无限循环。 while循环中start_date和end_date不变