Em PHP, encontrar input duplicada em uma multidimensional array, em seguida, sumr os valores em uma chave específica dessa matriz

Eu tenho uma matriz que foi criada a partir de um arquivo CSV. A matriz contém o seguinte. Basicamente tem quatro linhas e seis colunas. IE é multidimensional.

Array ( [1] => Array ( [WBS Element] => 1234567.01 [Proj System Status] => [CY Actuals] => 579373 [ITD Actuals] => 696,609 [Overall Commitment] => [Overall Assigned] => 696,609 [CYSpent] => 579,373 ) [2] => Array ( [WBS Element] => 1234567.02 [Proj System Status] => [CY Actuals] => 86689 [ITD Actuals] => 86,689 [Overall Commitment] => [Overall Assigned] => 86,689 [CYSpent] => 86,689 ) [3] => Array ( [WBS Element] => 1234567.02.01 [Proj System Status] => [CY Actuals] => 10750 [ITD Actuals] => 86,689 [Overall Commitment] => [Overall Assigned] => 86,689 [CYSpent] => 86,689 ) [4] => Array ( [WBS Element] => 1234567.02.02 [Proj System Status] => [CY Actuals] => 22756 [ITD Actuals] => 86,689 [Overall Commitment] => [Overall Assigned] => 86,689 [CYSpent] => 86,689 ) ) 

Você notará que uma das minhas chaves “Elemento PEP” tem um valor nela onde os primeiros dez caracteres podem corresponder a outra linha na matriz. O que eu preciso realizar é levar qualquer linha em que os dez primeiros caracteres do “Elemento PEP” combinem e somem as outras colunas juntas para que o resultado seja uma matriz agregada com as mesmas colunas, mas nenhuma linha com os dez primeiros caracteres correspondentes.

Espero que isso faça sentido o que estou tentando realizar. Eu sou novo quando se trata de PHP para que qualquer ajuda seja apreciada. Eu consegui uma verão de coluna para trabalhar, mas não consigo descobrir uma pesquisa para “combinar” as chaves, em seguida, combinar essas juntas, sumndo.

Desde já, obrigado!

 $new_array = array(); foreach ($array as $row) { $key = substr($row['WBS Element'],0,10); $new_array[$key]['WBS Element'] = $key; // optional $new_array[$key]['Proj System Status'] += $row['Proj System Status']; $new_array[$key]['CY Actuals'] += $row['CY Actuals']; $new_array[$key]['ITD Actuals'] += $row['ITD Actuals']; // same for Overall Commitment, etc... } 

Giro por cada matriz e

  1. crie uma série de possíveis correspondências de 10 personagens
  2. se uma correspondência for encontrada, adicione o resto das colunas a essa partida

Isso pressupõe que pode haver várias cadeias de 10 caracteres que podem corresponder:

 $stats =  $output = array(); foreach($stats as $stat){ // first we create an element in the array so we can sum $key = substr($stat['WBS Element'], 0, 10); if (!array_key_exists($stat['WBS Element'], $output)){ $output[$key] = array(); } // sum up rest of columns based on $output[$key] // or simply create them if the if-statement was matched above $output[$key]['CYSpent'] += $stat['CYSpent']; // etc } 

Isso lhe dará uma saída de

 array( [10-char-key-1] => array( // columns ) [10-char-key-2] => array( // columns ) // etc )