通过一周中的几天循环检查多维数组-PHP

通过一周中的几天循环检查多维数组-PHP,php,Php,我在一周中的几天中循环,每天检查一个数组。我可以输出现有/匹配的值,但当没有相应的值时,我无法输出单个零,如果数组中有3个项,我将输出3个零。如何输出单个零?这是我的密码: $day1='9-9-2019'; $day2='9-10-2019'; $day3='9-11-2019'; $day4='9-12-2019'; $day5='9-13-2019'; $day6='9-14-2019'; $day7='9-15-2019'; $records = array( array(

我在一周中的几天中循环,每天检查一个数组。我可以输出现有/匹配的值,但当没有相应的值时,我无法输出单个零,如果数组中有3个项,我将输出3个零。如何输出单个零?这是我的密码:

$day1='9-9-2019';
$day2='9-10-2019';
$day3='9-11-2019';
$day4='9-12-2019';
$day5='9-13-2019';
$day6='9-14-2019';
$day7='9-15-2019';


$records = array(
    array(
        "date_sub" => "9-11-2019",
        "timeSum" => "99:00:00"
    ),
    array(
        "date_sub" => "9-12-2019",
        "timeSum" => "01:40:00"
    ),
    array(
        "date_sub" => "9-13-2019",
        "timeSum" => "00:20:00"
    )
);


for ($i = 1 ; $i < 8; $i++) {

    if ($i==1) { // is there anything for monday?

        foreach ($records as $row) {

            $date_sub=$row["date_sub"];
            $timeSum=$row["timeSum"];

            if ($date_sub==$day1) {echo "$date_sub: $timeSum";} else {echo "$day1: 0:00";}
        }
    }

    if ($i==2) { // is there anything for tuesday?

        foreach ($records as $row) {

            $date_sub=$row["date_sub"];
            $timeSum=$row["timeSum"];

            if ($date_sub==$day2) {echo "$date_sub: $timeSum";} else {echo "$day2: 0:00";}
        }
    }

    if ($i==3) { // is there anything for wednesday?

        foreach ($records as $row) { 

            $date_sub=$row["date_sub"];
            $timeSum=$row["timeSum"];

            if ($date_sub==$day3) {echo "$date_sub: $timeSum";} else {echo "$day3: 0:00";}
        }
    }

    if ($i==4) { // is there anything for thursday?

        foreach ($records as $row) { 

            $date_sub=$row["date_sub"];
            $timeSum=$row["timeSum"];

            if ($date_sub==$day4) {echo "$date_sub: $timeSum";} else {echo "$day4: 0:00";}
        }
    }

    if ($i==5) { // is there anything for friday?

        foreach ($records as $row) { 

            $date_sub=$row["date_sub"];
            $timeSum=$row["timeSum"];

            if ($date_sub==$day5) {echo "$date_sub: $timeSum";} else {echo "$day5: 0:00";}
        }
    }

    if ($i==6) { // is there anything for saturday?

        foreach ($records as $row) { 

            $date_sub=$row["date_sub"];
            $timeSum=$row["timeSum"];

            if ($date_sub==$day6) {echo "$date_sub: $timeSum";} else {echo "$day6: 0:00";}
        }
    }

    if ($i==7) { // is there anything for sunday?

        foreach ($records as $row) {

            $date_sub=$row["date_sub"];
            $timeSum=$row["timeSum"];

            if ($date_sub==$day7) {echo "$date_sub: $timeSum";} else {echo "$day7: 0:00";}
        }
    }
echo "<br />\n";
}


$day1='9-9-2019';
$day2='9-10-2019';
$day3='9-11-2019';
$day4='9-12-2019';
$day5='9-13-2019';
$day6='9-14-2019';
$day7='9-15-2019';
$records=数组(
排列(
“日期”=>“2019年9月11日”,
“timeSum”=>“99:00:00”
),
排列(
“日期”=>“2019年9月12日”,
“timeSum”=>“01:40:00”
),
排列(
“日期”=>“2019年9月13日”,
“timeSum”=>“00:20:00”
)
);
对于($i=1;$i<8;$i++){
如果($i==1){//星期一有什么事吗?
foreach($记录为$行){
$date_sub=$row[“date_sub”];
$timeSum=$row[“timeSum”];
如果($date_sub==$day1){echo“$date_sub:$timeSum”}其他{echo“$day1:0:00”}
}
}
如果($i==2){//星期二有什么事吗?
foreach($记录为$行){
$date_sub=$row[“date_sub”];
$timeSum=$row[“timeSum”];
如果($date_sub==$day2){echo“$date_sub:$timeSum”}其他{echo“$day2:0:00”}
}
}
如果($i==3){//星期三有什么事吗?
foreach($记录为$行){
$date_sub=$row[“date_sub”];
$timeSum=$row[“timeSum”];
如果($date_sub==$day3){echo“$date_sub:$timeSum”}其他{echo“$day3:0:00”}
}
}
如果($i==4){//星期四有什么事吗?
foreach($记录为$行){
$date_sub=$row[“date_sub”];
$timeSum=$row[“timeSum”];
如果($date_sub==$day4){echo“$date_sub:$timeSum”}其他{echo“$day4:0:00”}
}
}
如果($i==5){//星期五有什么事吗?
foreach($记录为$行){
$date_sub=$row[“date_sub”];
$timeSum=$row[“timeSum”];
如果($date_sub==$day5){echo“$date_sub:$timeSum”}其他{echo“$day5:0:00”}
}
}
如果($i==6){//周六有什么事吗?
foreach($记录为$行){
$date_sub=$row[“date_sub”];
$timeSum=$row[“timeSum”];
如果($date_sub==$day6){echo“$date_sub:$timeSum”}其他{echo“$day6:0:00”}
}
}
如果($i==7){//星期天有什么事吗?
foreach($记录为$行){
$date_sub=$row[“date_sub”];
$timeSum=$row[“timeSum”];
如果($date_sub==$day7){echo“$date_sub:$timeSum”}其他{echo“$day7:0:00”}
}
}
回显“
\n”; }

我的思路正确吗?还是我需要重新构造代码?

您的代码中有很多重复,有一种更简单的方法,首先创建一个星期中的日期数组,其中的值为0。我已经用
array\u fill\u keys()
完成了这项工作,并使用了单独的天数,如果可以的话,您可以直接将它们添加进去

循环遍历记录并将值放入
$week
数组的相应元素中

$week = array_fill_keys([$day1, $day2,$day3,$day4,$day5,$day6,$day7]
    , 0);

foreach ( $records as $record ) {
    $week[$record["date_sub"]] = $record["timeSum"];
}

print_r($week);
这将给

Array
(
    [9-9-2019] => 0
    [9-10-2019] => 0
    [9-11-2019] => 99:00:00
    [9-12-2019] => 01:40:00
    [9-13-2019] => 00:20:00
    [9-14-2019] => 0
    [9-15-2019] => 0
)
然后你可以在上面循环,并按你需要的方式显示它

foreach ( $week as $date => $value )    {
    echo $date."-".$value.PHP_EOL;
}

当然还有很多其他的方法来处理你的问题。比如说

查找给定日期周的星期一

$monday = strtotime('this week monday', strtotime('2019-09-10'));
或者用
$monday=strotime(“本周星期一”)
如果你对本周感兴趣

$day = (new DateTime)->setTimestamp($monday);

$records = [
    [
        "date_sub" => "9-11-2019",
        "timeSum" => "99:00:00"
    ],
    [
        "date_sub" => "9-12-2019",
        "timeSum" => "01:40:00"
    ],
    [
        "date_sub" => "9-13-2019",
        "timeSum" => "00:20:00"
    ]
];

for($i = 0; $i < 7; $i++) {
    $entryFound = false;

    foreach($records as $record) {
        if($day == DateTime::createFromFormat('!m-d-Y', $record['date_sub'])){
            $entryFound = true;
            echo $day->format('m-d-Y'), " : ", $record['timeSum'];
        }
    }

    if(!$entryFound) {
        echo $day->format('m-d-Y'), " : 0:00";
    }

    $day->add(new DateInterval("P1D"));
    echo "<br/>";
}
使
foreach
循环更加简单

foreach($records as $date_sub => $timeSum) {
    if($day == DateTime::createFromFormat('!m-d-Y', $date_sub)){
        $entryFound = true;
        echo $day->format('m-d-Y'), " : ", $timeSum;
    }
}

您也可以省略将其作为DateTime对象进行比较,而只使用如下字符串:

foreach ...
    if($day->format('m-d-Y') === $date_sub){
...

谢谢,我的设置不接受您的数组填充键行,所以我只是在它之前的几天设置了一个单独的数组,并在数组填充键函数中引用了该数组。
foreach ...
    if($day->format('m-d-Y') === $date_sub){
...