我在下面有以下多维数组。我正在尝试检查具有相同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
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
)
)
编辑:更新了我的代码。它合并但是当我尝试为具有相同StartingDateTime的更多数组添加另一层过滤器时。我再次得到一个未定义的偏移误差。
答案 0 :(得分:0)
您可以使用 array_values 来重置您的数组索引。过滤后使用
$items = array_values($items);
更新代码: - $ item将是您的重复数组,$ finalArr将是最终结果数组
$finalArr = array();
foreach($items as $key=>$val){
$k = searchForId($val['StartingDateTime'],$finalArr);
if($k != 'blank'){
$finalArr[$key]['TWHour1'] = $val['TWHour'];
$finalArr[$key]['TEHour1'] = $val['TEHour'];
} else {
$finalArr[] = $val;
}
}
public function searchForId($strDateTime,$array) {
foreach ($array as $key => $val) {
if(array_key_exists('StartingDateTime', $val)){
if ($val['StartingDateTime'] == $strDateTime) {
return $key;
}
}
}
return 'blank';
}