Как искать идентификатор в массиве и клуб вместе в переполнении стека

Хорошо, я серьезно застрял, я работал над слиянием массива, находя идентификатор из массива. Я хочу найти SubjectID из массива, если он найден, затем объединить и массив и вычислить фактический час от времени к времени (рассчитать время между ). мой код массива ..
Фактический массив:

Array
(
[eventlist] => Array
(
[0] => Array
(
[allDay] => false
[id] => {83AE8778-A604-46F1-94BE-A045F2A9B548}
[SubjectID] => 2
[RoomID] => 2
[FromTime] => 00:30
[ToTime] => 01:45
[PlottingType] => Research
)

[1] => Array
(
[allDay] => false
[id] => {2B1F7B32-6D44-4700-8C50-F030B94D41F6}
[RoomID] => 2
[FromTime] => 00:00
[ToTime] => 00:45
[PlottingType] => Research
)

[2] => Array
(
[allDay] => false
[id] => {83AE8778-A604-46F1-94BE-A045F2A9B548}
[SubjectID] => 3
[RoomID] => 2
[FromTime] => 00:30
[ToTime] => 01:45
[PlottingType] => Admin
)

)

)

expected output:
Array
(
[eventlist] => Array
(
[0] => Array
(
[Time] => 01:15
[PlottingType] => Research
)

[2] => Array
(
[Time] => 00:15
[PlottingType] => Admin
)

)

)

пожалуйста, предложите мне подходящее решение ..

0

Решение

Ну, вы должны пройти через все из них

$array; // Your array
$new_array = array(); // Empty new array
$new_array['eventlist'] = array();
foreach($array['eventlist'] as $inner) {

if(isset($inner['SubjectID']) {
// Work out your maths for time difference and put it into $interval
$fromtime = new DateTime($inner['FromTime']);
$totime   = new DateTime($inner['ToTime']);

$interval = $fromtime->diff($totime);
$interval = $interval->format('%H:%i');

$new_inner = array(
"Time" => $interval,
"PlottingType" => $inner['PlottingType']
);
array_push($new_array['eventlist'], $new_inner);
}

}

Пока не проверено. Это ДОЛЖНО работать с PHP 5.4+

0

Другие решения

Это была моя попытка решить проблему.
Он хранит ключи, как в вашем примере.

$newarr = array();
$map = array();

foreach ($arr['eventlist'] as $key=>$val)
{
if (!isset($map[$val['PlottingType']]))
$map[$val['PlottingType']] = $key;

$fromTime = new DateTime($val['FromTime']);
$toTime = new DateTime($val['ToTime']);
$diff = $fromTime->diff($toTime);

$type = $val['PlottingType'];

if (!isset($newarr[$map[$val['PlottingType']]]))
{
$newarr[$map[$val['PlottingType']]] = array(
'time'=>$diff->format("%H:%i"),
'PlottingType'=>$type
);
}
else
{
$oldtime = new DateTime($newarr[$map[$val['PlottingType']]]['time']);
$newtime = $oldtime->add($diff);
$newarr[$map[$val['PlottingType']]]['time'] = $newtime->format("H:i");
}
}
0