2015-04-29 3 views
1

Это мой массив:Как получить сумму массива каждого столбца каждого подматрица?

Array ([HRI] => Array ([0] => Array ([0] => 14157.72 [1] => 10157.72) [1] => Array ([0] => 39140.94 [1] => 39140.94) [2] => Array ([0] => 36383.66 [1] => 36383.66) [3] => Array ([0] => 38508.00 [1] => 38508.00) [4] => Array ([0] => 8424.00 [1] => 8424.00)) [MPU] => Array ([0] => Array ([0] => 432.00 [1] => 1200.00)) [RHA] => Array ([0] => Array ([0] => 111562.50 [1] => 94237.50) [1] => Array ([0] => 37880.00 [1] => 31400.00) [2] => Array ([0] => 11364.00 [1] => 9420.00) [3] => Array ([0] => 23719.50 [1] => 18832.50) [4] => Array ([0] => 26705.00 [1] => 21800.00) [5] => Array ([0] => 5190.00 [1] => 3816.00) [6] => Array ([0] => 8707.50 [1] => 6966.00) [7] => Array ([0] => 0.00 [1] => 0.00) [8] => Array ([0] => 0.00 [1] => 0.00) [9] => Array ([0] => 0.00 [1] => 0.00) [10] => Array ([0] => 128952.00 [1] => 94500.00) [11] => Array ([0] => 0.00 [1] => 0.00)) [PBA] => Array ([0] => Array ([0] => 58816.26 [1] => 50784.36))) 

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

E.g.

Для вспомогательного массива с ключом HRI:

[HRI] => 
    Array (
     [0] => Array ([0] => 14157.72 [1] => 10157.72) 
     [1] => Array ([0] => 39140.94 [1] => 39140.94) 
     [2] => Array ([0] => 36383.66 [1] => 36383.66) 
     [3] => Array ([0] => 38508.00 [1] => 38508.00) 
     [4] => Array ([0] => 8424.00 [1] => 8424.00) 
    ) 

ожидается выход:

 
column 0: 
    14157.72 + 39140.94 + 36383.66 + 38508.00 + 8424.00 = ? 

column 1: 
    10157.72 + 39140.94 + 36383.66 + 38508.00 + 8424.00 = ? 

мой текущий код:

$amount = []; 
for($o=0;$o<count($totalamount);$o++){ 
    print_r($totalamount[$o]['login']); 

    if($totalamount[$o]['login'] == $totalamount[$o]['login']){ 
     //$amount[$totalamount[$o]['login']] += $totalamount[$o]['piamount']; 
     $piamount[$totalamount[$o]['login']][] = array_sum(array($totalamount[$o]['piamount'].',')); 
    } 
} 

Как я могу изменить свой код, чтобы получить ожидаемый результат?

+0

Значит, вы просто хотите напечатать сумму из каждого вспомогательного массива? Или вы хотите распечатать цифры со знаком «плюс»? – Rizier123

+0

Мне нужно добавить каждый дополнительный массив @ Rizier123? –

ответ

1

Это должно работать для вас:

Просто цикл через массив и получить сумму каждого суб массива с array_sum()

foreach($arr as $k => $v) 
    echo $k . " = " . array_sum($v) . "<br>"; 

пример ввода/вывода:

$arr = [ 
     [1,2,3], 
     [4,5,6], 
     [7,8,9], 
    ]; 

выход:

0 = 6 
1 = 15 
2 = 24 

EDIT:

Поскольку вы обновили свою матричную структуру, просто используйте:

foreach($arr as $k => $v) 
    echo $k . " = " . array_sum(array_map("array_sum", $v)) . "<br>"; 

EDIT 2:

Если вы хотите, чтобы сумма каждого массива суб массивах вы должны использовать две петли foreach:

foreach($arr as $k1 => $innerArray) { 
    foreach($innerArray as $k2 => $v) 
     echo "$k1-$k2 = " . array_sum($v) . "<br>"; 
    echo "<br><br>"; 
} 

EDIT 3:

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

foreach($arr as $k1 => $innerArray) { 
    foreach($innerArray[0] as $k2 => $v) 
     echo "$k1-$k2 = " . array_sum(array_column($innerArray, $k2)) . "<br>"; 
    echo "<br><br>"; 
} 
+1

, пожалуйста, объясните нижний предел, чтобы я мог улучшить свой ответ. – Rizier123

+0

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

+0

Rizer im, борющийся с массивом выше, как я могу это исправить? –

1
$a=Array (
    'HRI'=> Array (14157.72, 39140.94 , 36383.66,38508, 8424), 
    'RHA'=> Array (111562.5, 37880 , 11364 ,23719.5, 26705), 
    'PBA'=> Array (58816.26), 
    'MPU'=> Array (432) 
); 
$sumHRI=0; 

foreach ($a['HRI'] as $key=>$value) $sumHRI+=$value; 

echo "HRI=$sumHRI"; 

По обновленному вопросу:

$a=[ 
    'HRI'=>[ 
     [14157.72, 39140.94 , 36383.66,38508, 8424], 
     [14157.72, 39140.94 , 36383.66,38508, 8424], 
     [14157.72, 39140.94 , 36383.66,38508, 8424], 
     [14157.72, 39140.94 , 36383.66,38508, 8424], 
     ], 
    'RHA'=>[111562.5, 37880 , 11364 ,23719.5, 26705 ], 
    'PBA'=> [58816.26], 
    'MPU'=> [432] 
]; 

$sumArray=[]; 
foreach ($a as $k=>$bigArray){ 
    $sumArray[$k]=0; 
    foreach($bigArray as $subArray) $sumArray[$k]+=array_sum($subArray); 
    echo "$k={$sumArray[$k]}"; 
} 

То есть, если я правильно понял, и вы хотите рассчитанную сумму. Если вы хотите на самом деле напечатать цифры и знак +, туда нужно добавить конкатенацию строк.

+0

проверить мой обновленный вопрос –

+0

Как раз сейчас я заметил, что вы на самом деле изменили массив. У меня было ощущение, что вы хотите получить сумму на всех вспомогательных массивах ... Вы действительно хотите получить сумму сумм массива HRI? –

+0

Извините Ovidu, пожалуйста, уточните мой обновленный вопрос, который мне нужен выше ответа. 14157.72 + 39140.94 + 36383.66 + 38508.00 + 8424.00 =? проверьте значения массива, которые хотят добавить отдельные массивы с одним значением первого значения, а второе значение в настоящее время работает как 14157.72 +10157.72 =? –

Смежные вопросы