У меня есть массив, который был создан из файла CSV. Массив содержит следующее. В основном это четыре строки и шесть столбцов. IE он многомерный.
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 ) )
Вы заметите, что один из моих ключей «WBS Element» имеет значение, в котором первые десять символов могут совпадать с другой строкой в массиве. Я должен выполнить любую строку, в которой первые десять символов «WBS Element» совпадают и суммируют остальные столбцы вместе, чтобы результат был агрегированным массивом с одинаковыми столбцами, но без строк с совпадением первых десяти символов.
Надеюсь, это имеет смысл, чего я пытаюсь достичь. Я новичок, когда дело доходит до PHP, поэтому любая помощь будет оценена по достоинству. Я хочу, чтобы работала колонна, но я не могу найти массив для «сопоставления» ключей, а затем объединить их вместе, суммируя.
Заранее спасибо!
$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... }
я прокручивал бы каждый массив и
Это предполагает, что может быть несколько 10-символьных строк, которые могут совпадать:
$stats = <your array from above> $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 }
это даст вам результат
array( [10-char-key-1] => array( // columns ) [10-char-key-2] => array( // columns ) // etc )