以下代码在if语句中没有else的情况下完美运行。这是我试图添加的“其他”。当我这样做时,我会在下面的问题中得到回声。
再次感谢您的时间!
为了防止线程从2014年复活......我需要提出一个问题......
我想知道是否可以从一些开始困扰我的事情中得到一些额外的帮助。
我正在尝试使用位于此主题(Display image based on date in PHP)底部的代码,如果日期不是定义的,则修改为显示“默认”图像。
这是我的代码:
(而不是图像,我放置'test#'而不是图像路径。)
$events = array(
array(
'image' => 'test1',
'start' => '05-01',
'end' => '06-01'
),
array(
'image' => 'test2',
'start' => '07-01',
'end' => '08-01'
)
);
以及foreach代码:
(我删除了img标签,以便它回显相应的'test#'。)
foreach($events as $event) {
if(date('d-m') >= $event['start'] && date('d-m') <= $event['end']) {
echo $event['image'];
} else {
echo 'test3';
};
当我使用以下内容时,它仅显示“test3test2”而不是“test2”。
我试过添加“break;”在else回声之后。当我这样做时,它会删除有效的“test#”并离开“test3”。
任何帮助都会非常感激,因为我已经踢了两天......
如果还有其他方法可以做得更好,请告诉我!
答案 0 :(得分:2)
你正在进行字符串比较。你需要一个日期比较。在比较之前,您可以先以毫秒为单位转换日期。
您可以使用strtotime转换日期(以毫秒为单位),然后进行比较,如下所示。
foreach($events as $event) {
if(strtotime(date('d-m')) >= strtotime($event['start']) && strtotime(date('d-m')) <= strtotime($event['end'])) {
echo $event['image'];
} else {
echo 'test3';
}
编辑:可能添加年份对于更好的比较非常有用。
foreach($events as $event) {
if(strtotime(date('d-m-2016')) >= strtotime($event['start']."-2016") && strtotime(date('d-m-Y')) <= strtotime($event['end']."-2016")) {
echo $event['image'];
} else {
echo 'test3';
}
}
答案 1 :(得分:1)
如果没有其他功能,请将其删除。在循环之前添加默认值。
$image = 'test3':
foreach($events as $event) {
if(date('d-m') >= $event['start'] && date('d-m') <= $event['end']) {
$image = $event['image'];
break;
}
}
echo $image;
答案 2 :(得分:0)
字符串比较从左开始。在日期比较中,你必须先检查yerar,然后是月份,最后是一天。也使用strcmp而不是运算符。
foreach($events as $event) {
if( strcmp( date('m-d'), $event['start'])>0 .... ) {
echo $event['image'];
} else {
echo 'test3';
};
答案 3 :(得分:0)
试试这个
$events = array(
array(
'image' => 'test1',
'start' => '05-01',
'end' => '06-01'
),
array(
'image' => 'test2',
'start' => '07-01',
'end' => '08-01'
)
);
foreach($events as $event) {
list($st_date,$st_month) = explode('-',$event['start']);
list($end_date,$end_month) = explode('-',$event['end']);
$cur_date = date('d');
$cur_month = date('m');
if( ( $st_date >= $cur_date && $cur_month == $st_month ) && ( $cur_date <= $end_date && $cur_month == $end_month ) ){
echo $event['image'];
}
}