在这里我从数据库表的行中访问'日期'键值。我可以回应这些价值观,没问题。循环数组值
$res = $mysqli->query("SELECT * FROM alfred ORDER BY id ASC");
$row = $res->fetch_all(MYSQLI_ASSOC);
foreach ($row as $key => $value){
$availDate = $value['date'];
echo $availDate.'<br />';
}
上述这个循环示出了从DB所有“日期”的值,在这种情况下,存在3 dates-“2012年9月25日”,“2012-09-27”和“2012年9月29日”。 但是之后我需要将这些'日期'值中的每一个值与$date->format('Y-m-d')
的值从下面的代码中进行比较,并将每个日期以相应的“繁忙”或“可用”状态显示在表格的单独<td>
中。我的下一个版本只比较'date'键的“最后”值 - “2012-09-29”,但我需要比较上面数组中的每个'date'值,它也意味着“2012-09-25”和“2012-09-27”。我尝试了很多版本,但仍然不成功。有任何想法吗?
$date = new DateTime();
$endDate = new DateTime('+10 day');
for($date->format('Y-m-d'); $date->format('Y-m-d') < $endDate->format('Y-m-d'); $date->modify('+1 day')){
if ($date->format('Y-m-d') == $availDate){
echo '<td>'.$date->format('Y-m-d/D').' busy</td>';
} else {
echo '<td>'.$date->format('Y-m-d/D').' available</td>';
}
}
这是现在我得到的结果是:
2012-09-21/Fri available 2012-09-22/Sat available 2012-09-23/Sun available 2012-09-24/Mon available 2012-09-25/Tue available 2012-09-26/Wed available 2012-09-27/Thu available 2012-09-28/Fri available 2012-09-29/Sat busy 2012-09-30/Sun available
但实际上我需要显示“忙碌”状态也成“2012年9月25日” <td>
和2012年的“<td>
-09-27“,因为这些也是$ row数组中存在的'date'值。不幸的是,我不能在这里发布任何图片来显示,但我希望我的结果能够让您明白。
解决与in_array以下帮助:
$aAvailDate = array();
foreach ($row as $key => $value){
$aAvailDate[] = $value['date'];
}
$date = new DateTime();
$endDate = new DateTime('+10 day');
for($date->format('Y-m-d'); $date->format('Y-m-d') < $endDate->format('Y-m-d'); $date->modify('+1 day')){
if (in_array($date->format('Y-m-d'), $aAvailDate)){
echo '<td>'.$date->format('Y-m-d/D').' busy</td>';
} else {
echo '<td>'.$date->format('Y-m-d/D').' available</td>';
}
}
虽然你的问题不明确,但AFAIK 如果可用日期发生在给定日期之间,并且您想要检查长达3周,您想要显示“忙碌”。我对吗? – diEcho
在SQL中进行日期检查会不会更容易? – andrewsi
@raivis:尝试使用MySQL解决方案。 – diEcho