【发布时间】:2016-10-25 11:07:41
【问题描述】:
我在下面有以下多维数组。我正在尝试检查具有相同 StartingDateTime 的数组。如果是这样,我想将它们合并到一个数组中,但我只想保留TWHour、TEHour 的值并将它们重命名为TWHour1、TEHour1。之后我想用相同的StartingDateTime 取消设置其他数组。
重要提示:可以有相同StartingDateTime的数组的个数可以超过2个。所以如果超过2个,TWHour&TEHour的重命名应该是连续的。例如,如果组合了 3 个数组,则会有 TWHour1、TWHour2、TWHour3 等。
我目前有这个代码。它可以合并数组并将它们重命名为 1。它还删除具有相同StartingDateTime 的数组。但是,代码有一定的问题。首先,由于第一个 if 语句,它给了我一个未定义的概念错误。其次,它仅限于一次合并,如果有更多则不会合并其余的。最后,当我取消设置时,它会跳过数组编号。它删除了。结果,您可以看到$items[3] 丢失了。通常,使用 unset 只会替换缺少的数组。
任何帮助将不胜感激。
$checker = 1;
for ($i = 0; $i < count($items); $i++) {
// if they have the same StartingDateTime
if ($items[$i]['StartingDateTime'] == $items[$checker]['StartingDateTime']) {
// Transfer the values from the identified duplicate
// Have it renamed to TWHourx where x is the number of duplicates
$items[$i]["TWHour1"] = $items[$checker]['TWHour'];
$items[$i]["TEHour1"] = $items[$checker]['TEHour'];
// After moving the values to the $i array
// Delete the duplicated arrays
unset($items[$checker]);
// 2nd Layer of filter, more filters will probably have similar codes
$checker2 = $checker + 1;
if ($items[$i]['StartingDateTime'] == $items[$checker2]['StartingDateTime']) {
$items[$i]["TWHour2"] = $items[$checker2]['TWHour'];
$items[$i]["TEHour2"] = $items[$checker2]['TEHour'];
}
unset($items[$checker2]);
$items = array_values($items);
} else {
// Do nothing
}
// Count($items) changes once it unsets an array
// new count to get the new count value of $items array
$newcount = count($items);
if ($checker < $newcount) {
$checker++;
} else {
// Do nothing
}
}
过滤后的 $items 数组的提取
Notice: Undefined offset: 30 in line 116
[25] => Array
(
[StartingDateTime] => 2016-06-26
[TWHour] => 00:00:00
[TEHour] => 01:00:00
[NoOfHoursWorked] => 10
[NoOfHoursRest] => 14
[Comments] => want
[NoOfHoursRestAny24HR] => 14
[NoOfHoursRestAny7Day] => 98
[TWHour1] => 04:00:00
[TEHour1] => 05:00:00
[TWHour2] => 12:00:00
[TEHour2] => 16:00:00
)
$items 数组
Array
(
[0] => Array
(
[StartingDateTime] => 2016-06-26
[TWHour] => 19:30:00
[TEHour] => 23:30:00
[NoOfHoursWorked] => 10
[NoOfHoursRest] => 14
[Comments] => any time
[NoOfHoursRestAny24HR] => 14
[NoOfHoursRestAny7Day] => 98
)
[1] => Array
(
[StartingDateTime] => 2016-06-27
[TWHour] => 13:30:00
[TEHour] => 23:30:00
[NoOfHoursWorked] => 10
[NoOfHoursRest] => 14
[Comments] => I
[NoOfHoursRestAny24HR] => 14
[NoOfHoursRestAny7Day] => 98
)
[2] => Array
(
[StartingDateTime] => 2016-06-28
[TWHour] => 03:00:00
[TEHour] => 05:00:00
[NoOfHoursWorked] => 10
[NoOfHoursRest] => 14
[Comments] => want
[NoOfHoursRestAny24HR] => 14
[NoOfHoursRestAny7Day] => 98
)
[3] => Array
(
[StartingDateTime] => 2016-06-28
[TWHour] => 13:30:00
[TEHour] => 23:30:00
[NoOfHoursWorked] => 10
[NoOfHoursRest] => 14
[Comments] => want
[NoOfHoursRestAny24HR] => 14
[NoOfHoursRestAny7Day] => 98
)
[4] => Array
(
[StartingDateTime] => 2016-06-29
[TWHour] => 13:30:00
[TEHour] => 23:30:00
[NoOfHoursWorked] => 10
[NoOfHoursRest] => 14
[Comments] => to rest
[NoOfHoursRestAny24HR] => 14
[NoOfHoursRestAny7Day] => 98
)
[5] => Array
(
[StartingDateTime] => 2016-06-30
[TWHour] => 12:30:00
[TEHour] => 23:30:00
[NoOfHoursWorked] => 10
[NoOfHoursRest] => 14
[Comments] => hehe
[NoOfHoursRestAny24HR] => 14
[NoOfHoursRestAny7Day] => 98
)
)
预期结果
Array
(
[0] => Array
(
[StartingDateTime] => 2016-06-26
[TWHour] => 19:30:00
[TEHour] => 23:30:00
[NoOfHoursWorked] => 10
[NoOfHoursRest] => 14
[Comments] => any time
[NoOfHoursRestAny24HR] => 14
[NoOfHoursRestAny7Day] => 98
)
[1] => Array
(
[StartingDateTime] => 2016-06-27
[TWHour] => 13:30:00
[TEHour] => 23:30:00
[NoOfHoursWorked] => 10
[NoOfHoursRest] => 14
[Comments] => I
[NoOfHoursRestAny24HR] => 14
[NoOfHoursRestAny7Day] => 98
)
[2] => Array
(
[StartingDateTime] => 2016-06-28
[TWHour] => 03:00:00
[TEHour] => 05:00:00
[NoOfHoursWorked] => 10
[NoOfHoursRest] => 14
[Comments] => want
[NoOfHoursRestAny24HR] => 14
[NoOfHoursRestAny7Day] => 98
[TWHour1] => 13:30:00
[TEHour1] => 23:30:00
)
[3] => Array
(
[StartingDateTime] => 2016-06-29
[TWHour] => 13:30:00
[TEHour] => 23:30:00
[NoOfHoursWorked] => 10
[NoOfHoursRest] => 14
[Comments] => to rest
[NoOfHoursRestAny24HR] => 14
[NoOfHoursRestAny7Day] => 98
)
[4] => Array
(
[StartingDateTime] => 2016-06-30
[TWHour] => 12:30:00
[TEHour] => 23:30:00
[NoOfHoursWorked] => 10
[NoOfHoursRest] => 14
[Comments] => hehe
[NoOfHoursRestAny24HR] => 14
[NoOfHoursRestAny7Day] => 98
)
)
编辑:更新了我的代码。它合并但是当我尝试为更多具有相同起始日期时间的数组添加另一层过滤器时。我再次收到未定义的偏移错误。
【问题讨论】:
标签: php arrays multidimensional-array associative-array key-value