Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 循环数组值_Php_Arrays_Loops - Fatal编程技术网

Php 循环数组值

Php 循环数组值,php,arrays,loops,Php,Arrays,Loops,在这里,我从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”键值。我可以回应这些值,没问题

$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 />';
}
以下是我现在得到的结果:

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”的
和“2012-09-27”的
中显示“忙碌”状态,因为这些也是$row数组中存在的“日期”值。不幸的是,我不能在这里张贴任何图片来显示,但我希望我的结果上面给你的想法

在以下in_阵列的帮助下解决:

$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>';
            }
    }
$aAvailDate=array();
foreach($key=>$value的行){
$aAvailDate[]=$value['date'];
}
$date=新的日期时间();
$endDate=新的日期时间(“+10天”);
对于($date->format('Y-m-d');$date->format('Y-m-d')<$endDate->format('Y-m-d');$date->modify('+1天')){
if(在数组中($date->format('Y-m-d'),$aAvailDate)){
回显“”。$date->格式('Y-m-d/d')。'busy';
}否则{
回显“”。$date->格式('Y-m-d/d').“可用”;
}
}
可能是这样吗

$date = new DateTime();
$endDate = new DateTime('+3 week');
for($date->format('Y-m-d'); $date->format('Y-m-d') < $endDate->format('Y-m-d'); $date->modify('+1 day')){
    $tempDate = $date->format('Y-m-d');
    if ($tempDate === $availDate){
    echo '<td class="busy">busy</td>';
    } else {
      echo '<td>free</td>';
        }
}
$date=new DateTime();
$endDate=新日期时间(“+3周”);
对于($date->format('Y-m-d');$date->format('Y-m-d')<$endDate->format('Y-m-d');$date->modify('+1天')){
$tempDate=$date->format('Y-m-d');
如果($tempDate==$availDate){
回声“忙”;
}否则{
回声“自由”;
}
}

我还没有测试您的代码,但我认为您在这里不必要地运行,这会弄乱您的逻辑

每次运行它时,PHP都会将对象转换为字符串,然后将其与其他字符串进行比较。这没什么用


相反,您应该使用的功能来比较对象本身。您唯一需要使用
format()
方法的时间是在输出到浏览器、SQL查询等时

虽然您的问题不清楚,但还可以

如果可用日期介于给定日期和3周之间,您希望显示“忙” 否则显示“免费”

我建议您使用MySQL(未经测试)执行此操作


尝试
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");
}
$date=new DateTime();
$endDate=新日期时间(“+3周”);
而($date<$endDate){
如果($date->format('Y-m-d')==$availDate){
回声“忙”;
}否则{
回声“自由”;
}
$date->modify(“+1天”);
}
像这样的东西?(如果我理解您试图正确执行的操作)



虽然您的问题尚不清楚,但如果可用日期在给定日期之间,并且您希望最多检查3周,您希望显示“忙”。我说的对吗?在SQL中进行日期检查会不会更容易?@raivis:试试MySQL解决方案。堆栈溢出不是一个论坛。这是一个问答网站。你不应该把答案贴在问题里面,然后在标题中大喊解决。相反,你应该将答案作为答案发布,并将其标记为接受。严格比较(
==
)会有什么区别?不。此版本再次仅检查“日期”的“最后”值keys@diEcho“==”没有区别,因为所有这些值都是相同的数据类型。我否决了这个答案,不仅仅是因为它不能解决问题,但是,因为用一个字符的更改粘贴整个代码并不是解释解决方案的好方法。我从DB中获取的“日期”值存储为('Y-m-d'),这就是我将$date转换为此格式的原因。您应该用另一种方式转换:将字符串转换为对象,而不是将对象转换为字符串。而不仅仅是发布更正后的代码,你能在评论中解释你所做的改变吗?@raivis刚刚更新了一个新的解决方案。还添加了一些解释性文本
SELECT *,
IF( `DateCol` BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 3 WEEK), 'Busy','Free') 
AS status
FROM TableName
$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");
}
<?php

$avail_dates = array();
$res = $mysqli->query("SELECT DATE_FORMAT(date, '%Y-%m-%d') AS availDate FROM alfred ORDER BY id ASC"); 
$row = $res->fetch_all(MYSQLI_ASSOC); 
foreach ($row as $key => $value){ 
$avail_dates[] = $value['availDate']; 
}


$startDate = date('Y-m-d');
$endDate = date('Y-m-d', strtotime(date("Y-m-d", strtotime($startDate)) . " +3 week"));
?>

<table>
<?php
foreach ($avail_dates as $availDate){

echo "<tr><td>$availDate</td>";

if (($startDate <= $availDate) && ($endDate >= $availDate)){
echo "<td class='busy'>busy</td>"; 
}else{
echo "<td>free</td>"; 
}

echo "</tr>";
}
?>