Найти сумму элементов по столбцу в PHP - PullRequest
1 голос
/ 05 марта 2020

У меня есть этот многомерный массив:

$dataset = [
[5,15,25],
[15,5,27],
[10,8,16]
]

Мои проблемы:

  1. набор данных может иметь любое количество массивов, но каждый массив в данных set будет иметь одинаковое количество элементов

  2. Я хочу написать функцию, которая будет возвращать массив, который содержит итоги элементов с одинаковым индексом, то есть сумму всех первых элементов массива и сумма всех вторых элементов и т. д. в массиве "$ total"

Пример :

function find_total($dataset){
  $total[0]=5+15+10 //total of all the first elements
  $total[1]=15+5+8 //total of all the second elements
  $total[2]=25+27+16 //total of all the third elements

  return $total;
}

Ответы [ 5 ]

2 голосов
/ 05 марта 2020

Определенно будет много простых ответов, но вот изощренный (так как php5 .6 ):

$dataset = [
    [5,15,25],
    [15,5,27],
    [10,8,16],
];

print_r(array_map('array_sum', array_map(null, ...$dataset)));
1 голос
/ 05 марта 2020

Также вы можете сделать это с помощью array_column & array_sum :

$res = [];
$len = count($dataset[0]);
$i = 0;

while($i<$len){

    $res[] = array_sum(array_column($dataset,$i));
    $i++;
}
print_r($res);

Demo

Выход:

Array
(
    [0] => 30
    [1] => 28
    [2] => 68
)
0 голосов
/ 05 марта 2020
   function getArraySUm($dataset){
        $total = array();
        for($i=0; $i<count($dataset); $i++){
            $subArray = $dataset[$i];
            for($j=0; $j<count($subArray); $j++){
                if(!isset($total[$i])) $total[$i] = 0;
                $total[$j]+=$subArray[$j];
            }
        }
        return $total;
    }
0 голосов
/ 05 марта 2020
<?php

$dataset = [
[5,15,25],
[15,5,27],
[10,8,16]
];

$result = [];


for ($i = 0; $i<count($dataset); $i++) {
    $result[$i] = 0;
    for ($j = 0; $j<count($dataset[$i]); $j++){
        $result[$i] += $dataset[$j][$i];
    }
}

echo '<pre>';
var_dump($result);

Результат:

Array ( [0] => 30 [1] => 28 [2] => 68 )
0 голосов
/ 05 марта 2020

Если я понимаю, это то, что вы хотите. Правильно ?

$datas = [
[5,15,25],
[15,5,27],
[10,8,16]
];

$sum = [];

foreach($datas as $data) {
    $sum[] = array_sum($data);
};

var_dump($sum);

Будет возвращено:

array(3) {
  [0]=>
  int(45)
  [1]=>
  int(47)
  [2]=>
  int(34)
}
...