Php foreach循环中比较元素时未定义的偏移量
嗨,我想用foreach循环比较两个元素的日期。每当它们匹配时,将它们添加到一个数组中,并将该数组推送到另一个数组中 这样做的想法是,我将在一个表中显示所有元素,匹配的元素日期将其日期列分组为colspan=n。使用辅助数组,我将能够使用该数组的长度作为colspan数量Php foreach循环中比较元素时未定义的偏移量,php,arrays,Php,Arrays,嗨,我想用foreach循环比较两个元素的日期。每当它们匹配时,将它们添加到一个数组中,并将该数组推送到另一个数组中 这样做的想法是,我将在一个表中显示所有元素,匹配的元素日期将其日期列分组为colspan=n。使用辅助数组,我将能够使用该数组的长度作为colspan数量 $elements = array(); $ts_index = 0; foreach($timesheetweeks as $timesheetweek){ $arr = array(); foreach(
$elements = array();
$ts_index = 0;
foreach($timesheetweeks as $timesheetweek){
$arr = array();
foreach($timesheetweek->timesheets as $index => $timesheet){
$this_date = $timesheetweek->timesheets[$index]->start_date;
$next_date = $timesheetweek->timesheets[$index + 1]->start_date;
if($this_date == $next_date){
$elements[$ts_index][] = $timesheetweek->timesheets[$index + 1];
} else {
$elements[$ts_index] = $timesheetweek->timesheets[$index];
$ts_index += 1;
}
}
}
不幸的是,在经历了一些头痛和输给阿根廷的比赛后,我犯了以下错误:
未定义偏移量:4
仅供参考:这是我努力实现的目标:
elements [
1 => element1, //diff date
2 => array( //same date array
element2,
element3
),
3 => element4 //diff date
]
当$index达到其最大值$index=count$timesheetweek->timesheets-1;时,$timesheetweek->timesheets[$index+1]项不存在 对某些代码并不完全确定,但这一总体思路应该会有所帮助:
$elements = array();
$ts_index = -1;
$currentDate = '';
foreach ($timesheetweeks as $timesheetweek) {
foreach ($timesheetweek->timesheets as $index => $timesheet) {
if ($timesheet->start_date != $currentDate) {
// check to see if the last $elements element had just one entry, if so flatten it
if ($ts_index > -1 && count($elements[$ts_index]) == 1) {
$elements[$ts_index] = $elements[$ts_index][0];
}
$currentDate = $timesheet->start_date;
$ts_index++;
// create a new array to store this timesheet and any more that may have the same start_date
$elements[$ts_index] = array();
}
$elements[$ts_index][] = $timesheet;
}
}
// if the last element we added is an array with 1 item, flatten it
if ($ts_index > -1 && count($elements[$ts_index]) == 1) {
$elements[$ts_index] = $elements[$ts_index][0];
}
因为你的$index+1。当它到达最后一个元素时,它仍然在寻找下一个元素。你最好还是用一个loop@ElefantPhace:正如我所想并回答猎户座一样,谢谢你的回答!嘿,詹姆斯,谢谢你的回复。但是我没有得到$elements[$ts_index]=数组;部分这对我来说没什么意义。我编辑了我的页面以涵盖嵌套数组的实际含义。我已经更新了我的答案。因为我们只处理循环中的当前时间表,所以我们还不知道稍后循环中是否会有多个具有相同日期的时间表。为了安全起见,我们将$elements[$ts_index]的每个成员都设置为一个数组,在处理完当前开始日期后,我们可以检查该数组中是否只有一个元素,如果只有,则将其展平。不幸的是,这将设置主数组中的所有元素。我正在尝试调试,看看故障在哪里。我真的很抱歉,我刚刚发现了我的错误,它现在可以工作了。我完全忘记了日期实际上是一个碳物体。我只需要调用->toDateTimeString,它就工作了。。。我很抱歉^^^啊,这是一个边界外的错误:D这是有意义的。但我如何实施这项检查?现在真的不是我的日子。所以我假设使用$index=count$timesheetweek->timesheets-1;如您所建议的,并将if/else闭包置于两者之间?您可以添加一个条件以确保此项存在。例如,如果$index