PHP: mesclar elementos de uma matriz com base em chave e valor específicos

Eu tentei cerca de 20 idéias diferentes para isso e acho que já participei de tantos círculos, não consigo me lembrar de onde eu comecei. Tenho certeza de que esse é um simples também.

Eu tenho uma matriz;

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 ) ) 

Eu preciso mesclar os elementos onde o número de employee é o mesmo e adicionar os elementos de tempo total a novas chaves com base no type . É isso que eu quero dizer.

 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 ) ) 

Eu poderia fazer isso no nível da consulta, mas o SQL para criar a matriz original é tão complexo que prefiro apenas manter a única versão disso.

Qualquer sugestão sobre a melhor abordagem realmente me ajudaria a voltar a seguir com isso. E será apreciado REALMENTE.

Tente isso:

 $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 "
"; print_r(array_values($res));