다차원 배열의 모든 열 값을 합산하려면 어떻게 해야 합니까?

연관 키로 모든 컬럼 값을 추가하려면 어떻게 해야 합니까?키 세트는 동적인 것에 주의해 주세요.

입력 배열:

Array (
[0] => Array
(
 [gozhi] => 2
 [uzorong] => 1
 [ngangla] => 4
 [langthel] => 5
)
[1] => Array
(
 [gozhi] => 5
 [uzorong] => 0
 [ngangla] => 3
 [langthel] => 2
)
[2] => Array
(
 [gozhi] => 3
 [uzorong] => 0
 [ngangla] => 1
 [langthel] => 3
) ) 

원하는 결과:

Array (
[gozhi] => 10
[uzorong] => 1
[ngangla] => 8
[langthel] => 10 ) 


질문에 대한 답변



를 사용하면 문제에 대한 일반적인 해결 방법(내부 배열마다 고유한 키를 가질 있는 해결 방법)을 얻을 수 있습니다.

$final = array();
array_walk_recursive($input, function($item, $key) use (&$final){
$final[$key] = isset($final[$key]) ?
$item + $final[$key] : $item; }); 

일반적인 경우의 예

또, PHP 5.5 에서는, 함수를 사용해 정확한 키에 대해서 필요한 결과를 얻을 수 있습니다.예를 들어 다음과 같습니다.

array_sum(array_column($input, 'gozhi'));

지정된 키에 대한 예

같은 키를 가지는 모든 내부 어레이의 합계(투고된 결과)를 취득하는 경우는, 다음과 같이 할 수 있습니다(첫 번째 내부 어레이는 다른 어레이와 같은 구조를 가질 필요가 있습니다).

$final = array_shift($input);
foreach ($final as $key => &$value){
$value += array_sum(array_column($input, $key)); }
unset($value); 

예: 모든 내부 어레이에 동일한 키가 있는 경우

를 사용하는 일반적인 케이스솔루션이 필요한 경우는, 우선 모든 일의 키를 취득해, 다음에 각 키의 합계를 취득하는 것을 고려할 수 있습니다.

$final = array();
foreach($input as $value)
$final = array_merge($final, $value);
foreach($final as $key => &$value)
$value = array_sum(array_column($input, $key));
unset($value); 

일반적인 경우의 예




$sumArray = array();
foreach ($myArray as $k=>$subArray) {
foreach ($subArray as $id=>$value) {
$sumArray[$id]+=$value;
} }
print_r($sumArray); 



다음 스니펫을 사용합니다.

$key = 'gozhi'; $sum = array_sum(array_column($array,$key)); 



다음은 다른 두 가지 솔루션과 유사한 솔루션입니다.

$acc = array_shift($arr); foreach ($arr as $val) {
foreach ($val as $key => $val) {
$acc[$key] += $val;
} } 

그러나 어레이 키가 이미 존재하는지 확인할 필요가 없으며 알림도 표시되지 않습니다.




다음 방법으로도 할 수 있습니다.array_map:

$rArray = array(
0 => array(
'gozhi' => 2,
'uzorong' => 1,
'ngangla' => 4,
'langthel' => 5
),
1 => array(
'gozhi' => 5,
'uzorong' => 0,
'ngangla' => 3,
'langthel' => 2
),
2 => array(
'gozhi' => 3,
'uzorong' => 0,
'ngangla' => 1,
'langthel' => 3
), );
$sumResult = call_user_func_array('array_map', array_merge(['sum'], $rArray));
function sum() {
return array_sum(func_get_args()); }