Массивы сумм в php

#php #mysql #arrays

#php #mysql #массивы

Вопрос:

У меня есть результат из базы данных.

 Array
(
    [0] = stdClass Object
    (
        [name] = First
        [sum] = 3,8,...
    )

    [1] = stdClass Object
    (
        [name] = Second
        [sum] = -1,0,...
    )

    [2] = stdClass Object
    (
        [name] = Third
        [sum] = 2,-1...
    )

)
 

Итак, теперь мне нужно суммировать все в столбце «сумма».

Мне нужно получить результат, подобный

 $final = (4, 7,...);
 

Я преобразовал sum в array throw explode(), а затем попробовал с foreach

например

 foreach ($result as $k=>$subArray) {
   $arrayNumbers = explode(",",$subArray->sum);

    foreach ($arrayNumbers as $key => $value) {
     $sumArray[] = $value];
     $stepToSum2[] = array_sum($sumArray);

  }
  unset($arrayNumb);
}
 

Не уверен, что мой пример работает, потому что я уже застрял с прокомментированным кодом.

В любом случае, я с помощью некоторых манипуляций могу получить или суммировать правильные первые числа (5) или сумму моего массива (11).

Тот же результат с этим

 $sum = array_sum(array_map(function($var) {
  return $var['sum'];
}, $myResultArray));
 

Я искал ответ, но большинство ответов только для двух массивов, но в одних и тех же таблицах у меня более 5 массивов, поэтому я не могу понять, как это реализовать.

Комментарии:

1. У вас всегда одинаковая структура для атрибута sum в вашей базе данных?

2. номер 1, номер 2?

3. или может быть x чисел в строке

4. Существует более 100 чисел для каждого из них, разделенных запятой, но всегда с одним и тем же номером. Структура та же.

Ответ №1:

array_reduce подходит для уменьшения массива до одного значения, как вы делаете здесь. Он принимает массив и функцию, которая обновляет значение «переноса» для каждого элемента в вашем массиве.

 $result = array_reduce($your_array, function($carry, $item) {
    foreach (explode(',', $item->sum) as $key => $value) {
        $carry[$key] = $value   (isset($carry[$key]) ? $carry[$key] : 0);
        // (OR $carry[$key] = $value   ($carry[$key] ?? 0); in PHP 7)
    }
    return $carry;
}, []);
 

Комментарии:

1. Это только для двух чисел в сумме?

2. Потому что моя сумма выглядит как [сумма] => 3.96,8.24,11.64,14.79,16.16,17.38,17.85,18.28,18.28

3. О, я понимаю. Да, это только для двоих. Я основал это на том, что было показано в вашем вопросе, но я могу обновить его, чтобы показать, как это может работать для большего.

4. Обновите, пожалуйста. Я уверен, что это будет полезно в будущем.

Ответ №2:

Поскольку вы уже создаете массив:

 foreach ($result as $subArray) {
   $arrayNumbers[] = explode(",", $subArray->sum);
}

$first  = array_sum(array_column($arrayNumbers, 0));
$second = array_sum(array_column($arrayNumbers, 1));
 

Ответ №3:

Попробуйте это :

 foreach ($result as $k => $subArray) {
    $arrayNumbers = explode(",",$subArray->sum);

    foreach ($arrayNumbers as $key => $value) {
        $sumArray[$key] = isset($sumArray[$key]) ? $sumArray[$key] : 0;
        $sumArray[$key]  = $value;
    }
}
print_r($sumArray);