我有array
并使用foreach
循环我正在尝试检查dinner_date
是否与之前的索引dinner_date
匹配,如果他们不匹配我正在分配{ {1}}变量名为yes
这就是输出看起来行
$newDate
这是我的array:4 [▼
0 => array:3 [▼
"request_id" => "48"
"dinner_date" => "2016-05-16T10:00:00"
"new_date" => "no"
]
1 => array:3 [▼
"request_id" => "51"
"dinner_date" => "2016-05-16T10:00:00"
"new_date" => "no"
]
2 => array:3 [▼
"request_id" => "50"
"dinner_date" => "2016-05-27T10:00:00"
"new_date" => "no"
]
3 => array:3 [▼
"request_id" => "52"
"dinner_date" => "2016-05-27T10:00:00"
"new_date" => "no"
]
]
循环
foreach
正如您在数组输出的索引$dinnerDetails = array();
$lastDinnerDate = '';
$newDate = '';
foreach ($invitations as $invitation) {
$lastDinnerDate = $invitation['dinner_date'];
if ($invitation['dinner_date'] > $lastDinnerDate) {
$newDate = 'yes';
} else {
$newDate = 'no';
}
$dinnerDetails[] = array(
'request_id' => $invitation['request_id'],
'dinner_date' => $invitation['dinner_date'],
'new_dinner' => $newDate
);
}
中看到的那样2
它应该是new_date => no
,因为此索引的yes
与{{1}不同上面的索引。
我在这里做错了吗?
答案 0 :(得分:1)
将其更改为:
$lastDinnerDate = '';
foreach ($invitations as $invitation) {
$lastDinnerDate = $invitation['dinner_date'];
$newDate = 'no';
if ($lastDinnerDate != "") {
if ($invitation['dinner_date'] > $lastDinnerDate) {
$newDate = 'yes';
} else {
$newDate = 'no';
}
}
$lastDinnerDate = $invitation['dinner_date'];
$dinnerDetails[] = array(
'request_id' => $invitation['request_id'],
'dinner_date' => $invitation['dinner_date'],
'new_dinner' => $newDate
);
}
答案 1 :(得分:1)
评论:在你的情况下,它们都是相同的,你需要在条件之后存储$lastDinnerDate = $invitation['dinner_date'];
。
在if条件中再添加一个条件$lastDinnerDate != ""
,并在条件之后指定``。
对于比较,您需要将日期时间转换为时间戳。
foreach ($invitations as $invitation) {
if (strtotime($invitation['dinner_date']) > $lastDinnerDate && $lastDinnerDate != "") {
$newDate = 'yes';
} else {
$newDate = 'no';
}
$lastDinnerDate = strtotime($invitation['dinner_date']);
$dinnerDetails[] = array(
'request_id' => $invitation['request_id'],
'dinner_date' => $invitation['dinner_date'],
'new_dinner' => $newDate
);
}
答案 2 :(得分:0)
这里的主要问题是你在每个循环中存储相同的值,因此每次两个日期都是相同的,因此执行永远不会到达“是”分支。
此外,您正在尝试为两个字符串应用算术比较运算符,这将提供虚假结果:
$invitation['dinner_date'] > $lastDinnerDate
您需要做的就是使用 strtotime() 。它基本上将任何日期格式解析为时间戳,您可以定期进行比较:
strtotime($invitation['dinner_date']) > strtotime($lastDinnerDate)
它可以解析各种日期字符串,有关详细信息,请访问官方手册中的 datetime.formats 。