2014-01-19 259 views
0

我正在创建一个小预订系统。行被设置为当前周的列到特定时间。如果语句在foreach循环中

我想要做的是将日期名称更改为特定的颜色。蓝色在过去,日期目前在绿色。不知何故if声明没有做任何事情。任何人都可以向正确的方向解释或指出我吗?

$today = time(); 

$lastWeek = []; 
$lastWeek[0] = date('D',strtotime('last monday')); 
$lastWeek[1] = date('D',strtotime('last monday +1day')); 
$lastWeek[2] = date('D',strtotime('last monday +2day')); 
$lastWeek[3] = date('D',strtotime('last monday +3day')); 
$lastWeek[4] = date('D',strtotime('last monday +4day')); 

$timeSlot = []; 
$timeSlot [0] = date('H:i', strtotime('9:00'))  ."-9:30"; 
$timeSlot [1] = date('H:i', strtotime('9:30'))  ."-10:00"; 
$timeSlot [2] = date('H:i', strtotime('10:00'))  ."-10:30"; 
$timeSlot [3] = date('H:i', strtotime('10:30'))  ."-11:00"; 
$timeSlot [4] = date('H:i', strtotime('11:00'))  ."-11:30"; 
$timeSlot [5] = date('H:i', strtotime('11:30'))  ."-12:00"; 

echo "<html><head><title>Doctor Booking timetable</title></head>"; 
echo "<body><table id=myTable border=2 align=center >"; 

echo "<tr><td>Week Commencing</td>"; 

foreach ($timeSlot as $time) 
{ 
    echo"<td>"; 
    echo $time; 
    echo"</td>"; 
} 
echo "</tr>"; 

foreach ($lastWeek as $day) 
{ 
    echo "<tr><td>"; 
    echo $day; 
    echo "</td></tr>"; 
} 

if ($lastWeek < $today){ 
    echo "<font color='blue'></font>"; 
}else { 
    echo "<font color='green'></font>"; 
} 
+6

的'if'语句是*不*了'foreach'循环中。 – Boaz

+0

你也需要查看一些HTML教程,你的html无效。 '$ lastWeek'是一个数组,它不会评估为真 –

+0

foreach循环中if语句的语法是什么?出现了很多错误。谢谢。 – user3204192

回答

2

你需要把if声明foreach内(如您的文章标题所暗示的),还包$day你的颜色标记内。仅供参考,font标签已被弃用很长一段时间,您应该使用span来代替。

在您的问题中,您正在比较$lastWeek$today - $lastWeek是一个数组,您正在循环。按照您的foreach,当前迭代将被包含在$day变量,所以你应该比较$today

foreach ($lastWeek as $day) 
{ 
    echo "<tr><td>"; 
    $color = ($day < $today) ? 'blue' : 'green'; 
    echo '<span style="color: ' . $color . '">' . $day . '</span>'; 
    echo "</td></tr>"; 
} 

PS:我用的ternary operator在这里为您的if语句。这是同样的事情写:

if($day < $today) 
    $color = 'blue'; 
else 
    $color = 'green'; 

...但短

PPS。我假设您的日期格式正确,可以使用GT/LT运算符进行比较。如果不是,则需要使用类似date function的格式对其进行格式化。

+0

OP还将当前时间戳“$ today”与数组“$ lastWeek”进行比较,而不是使用数组元素“$ day”。你似乎已经纠正了这个疏忽,但也可能特别解释了这一点。 – Boaz

+1

@Boaz加为参考 - 欢呼 –

+0

感谢您的帮助,这是排序我的问题,我也牢记你说的日期。 – user3204192

0

我不会使用已弃用的标签,除非它非常需要。 查看关于这http://www.w3schools.com/tags/tag_font.asp

使用您的代码风格:

$today = time(); 

$lastWeek = array(); 
$lastWeek[0] = date('D',strtotime('last monday')); 
$lastWeek[1] = date('D',strtotime('last monday +1day')); 
$lastWeek[2] = date('D',strtotime('last monday +2day')); 
$lastWeek[3] = date('D',strtotime('last monday +3day')); 
$lastWeek[4] = date('D',strtotime('last monday +4day')); 

$timeSlot = array(); 
$timeSlot [0] = date('H:i', strtotime('9:00'))  ."-9:30"; 
$timeSlot [1] = date('H:i', strtotime('9:30'))  ."-10:00"; 
$timeSlot [2] = date('H:i', strtotime('10:00'))  ."-10:30"; 
$timeSlot [3] = date('H:i', strtotime('10:30'))  ."-11:00"; 
$timeSlot [4] = date('H:i', strtotime('11:00'))  ."-11:30"; 
$timeSlot [5] = date('H:i', strtotime('11:30'))  ."-12:00"; 

echo "<html><head><title>Doctor Booking timetable</title></head>"; 
echo "<body><table id=myTable border=2 align=center >"; 

echo "<tr><td>Week Commencing</td>"; 

foreach ($timeSlot as $time) 
{ 
    echo"<td>"; 
    echo $time; 
    echo"</td>"; 
} 
echo "</tr>"; 

foreach ($lastWeek as $day) 
{ 
    echo "<tr><td>"; 
    if ($lastWeek < $today){ 
     echo "<font color='blue'>$day</font>"; 
    }else { 
     echo "<font color='green'>$day</font>"; 
    } 
    echo "</td></tr>"; 
}