PHP: объединить элементы массива на основе определенного ключа и значения

Я пробовал около 20 различных идей для этого, и я думаю, что ушел во многие круги, я не могу вспомнить, с чего я начал. Я уверен, что это тоже просто.

У меня есть массив;

Array ( [0] => Array ( [employee] => 15 [first_name] => Person1 [surname] => Person1 [totaltime] => 183.75 [type] => 0 ) [1] => Array ( [employee] => 15 [first_name] => Person1 [surname] => Person1 [totaltime] => 64.50 [type] => 1 ) [2] => Array ( [employee] => 23 [first_name] => Person2 [surname] => Person2 [totaltime] => 2.00 [type] => 0 ) [3] => Array ( [employee] => 51 [first_name] => Person3 [surname] => Person3 [totaltime] => 119.25 [type] => 0 ) [4] => Array ( [employee] => 59 [first_name] => Person4 [surname] => Person4 [totaltime] => 170.75 [type] => 0 ) ) 

Мне нужно объединить элементы, где номер employee одинаковый, и добавить элементы totaltime к новым ключам в зависимости от type . Это то, что я имею в виду.

 Array ( [0] => Array ( [employee] => 15 [first_name] => Person1 [surname] => Person1 [totaltime_type_0] => 183.75 [totaltime_type_1] => 64.50 ) [1] => Array ( [employee] => 23 [first_name] => Person2 [surname] => Person2 [totaltime_type_0] => 2.00 [totaltime_type_1] => 0 ) [2] => Array ( [employee] => 51 [first_name] => Person3 [surname] => Person3 [totaltime_type_0] => 119.25 [totaltime_type_1] => 0 ) [3] => Array ( [employee] => 59 [first_name] => Person4 [surname] => Person4 [totaltime_type_0] => 170.75 [totaltime_type_1] => 0 ) ) 

Я мог бы сделать это на уровне запросов, но SQL для создания исходного массива настолько сложный, что я бы предпочел поддерживать только одну его версию.

Любые предложения по наилучшему подходу действительно помогут мне вернуться к следующему этапу. И будет ДЕЙСТВИТЕЛЬНО оценен.

Попробуй это :

 $res = array(); foreach($your_array as $val){ $res[$val['employee']]['employee'] = $val['employee']; $res[$val['employee']]['first_name'] = $val['first_name']; $res[$val['employee']]['surname'] = $val['surname']; if($val['type'] == 0){ if(array_key_exists("totaltime_type_0",$res[$val['employee']])){ $res[$val['employee']]['totaltime_type_0'] += $val['totaltime']; } else{ $res[$val['employee']]['totaltime_type_0'] = $val['totaltime']; } } if($val['type'] == 1){ if(array_key_exists("totaltime_type_1",$res[$val['employee']])){ $res[$val['employee']]['totaltime_type_1'] += $val['totaltime']; } else{ $res[$val['employee']]['totaltime_type_1'] = $val['totaltime']; } } } echo "<pre>"; print_r(array_values($res));