在这里,我从DB表的行中访问'date‘键值。我可以呼应这些值,没问题。
$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的所有'date‘值,在本例中有3个日期- "2012-09-25“"2012-09-27”和"2012-09-29“。但是,我需要将这些“日期”值与下面代码中的$date->format('Y-m-d')值进行比较,并将具有相应“忙”或“可用”状态的每个日期显示到表的单独<td>中。我下面的版本只比较“日期”键的“最后”值- "2012-09-29",但我需要比较上面数组中的每个“日期”值,它也意味着"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-09-25“的<td>和"2012-09-27”的<td>中显示"busy“状态,因为这些也是存在于$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>';
}
}发布于 2012-09-12 02:22:45
我还没有测试您的代码,但我认为您在这里运行->format('Y-m-d')是不必要的,这会扰乱您的逻辑。
每次运行时,PHP都会将对象转换为字符串,然后将其与其他字符串进行比较。这不会做任何有用的事情。
相反,您应该使用the DateTime class的功能来比较对象本身。只有在输出到浏览器、输出到SQL查询等时,才需要使用format()方法。
发布于 2012-09-12 02:27:06
虽然你的问题不清楚,但AFAIK
如果可用日期出现在给定日期之间,则显示“忙”,否则显示“空闲”。
我建议你使用MySQL (未测试)来做这件事
SELECT *,
IF( `DateCol` BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 3 WEEK), 'Busy','Free')
AS status
FROM TableName发布于 2012-09-12 02:27:59
尝试使用while循环而不是foreach。另外,直接比较DateTime对象,而不是格式化字符串。
$date = new DateTime();
$endDate = new DateTime('+3 week');
while( $date < $endDate) {
if ($date->format('Y-m-d') == $availDate){
echo '<td class="busy">busy</td>';
} else {
echo '<td>free</td>';
}
$date->modify("+1 day");
}https://stackoverflow.com/questions/12375528
复制相似问题