循环检查一周中的几天,检查多维数组 - 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(
"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";
}

我是否走在正确的轨道上,还是需要重组我的代码?

你的代码中有很多重复,有一种更简单的方法,它首先在一周中创建一个日期数组,并在其中创建一个值 0。 我已经用array_fill_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 = strtotime('this week monday');如果你对本周感兴趣。

$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/>";
}

我每次都遍历数组并进行比较$records因为我假设每天可能有多个条目,并且您感兴趣的一周之外的其他日期也可能有多个条目。


您也可以将$records转换为类似的东西

Array(
"9-11-2019" => "99:00:00",
...
)

使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){
...

最新更新