通过一周中的几天循环检查多维数组-PHP
我在一周中的几天中循环,每天检查一个数组。我可以输出现有/匹配的值,但当没有相应的值时,我无法输出单个零,如果数组中有3个项,我将输出3个零。如何输出单个零?这是我的密码:通过一周中的几天循环检查多维数组-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(
$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){
...