php, сумма двух значений массива - PullRequest
1 голос
/ 08 июля 2019

У меня есть два массива

первый массив:

Array ( 
    [01-1970] => 0.00 
    [03-2019] => 4350.00 
    [05-2019] => 150.00 
    [06-2019] => 50.00 
)

второй массив:

Array ( 
    [03-2019] => 0.00
    [04-2019] => 0.00 
    [06-2019] => 34.83 
)

Мой ожидаемый результат суммы:

Array ( 
    [01-1970] => 0.00 
    [03-2019] => 4350 
    [04-2019] => 0.00  
    [05-2019] => 150.00 
    [06-2019] => 84.83
)

Как этого добиться?

Ответы [ 8 ]

3 голосов
/ 08 июля 2019

Лучше всего по отдельности зацикливать массивы и суммировать значения в результирующий массив на ходу. Мы можем создать новый массив, содержащий два массива, чтобы немного сократить наш код (посмотрите, как мы определяем [$first, $second] в качестве первого цикла).

Это устраняет любые проблемы со смешанной длиной и сохраняет все ключи и значения в массиве без изменений.

$result = [];
// Loop over our two arrays, here called $first and $second
foreach ([$first, $second] as $a) {
    // Loop over the values in each array
    foreach ($a as $k=>$v) {
        // If the index is new to the $result array, define it to be zero (to avoid undefined index notices) 
        if (!isset($result[$k]))
            $result[$k] = 0;

        // Sum up the value!
        $result[$k] += $v;
    }
}
print_r($result);
2 голосов
/ 08 июля 2019

Вы можете использовать функцию, которую я сделал:

<code><?php
    function array_sum_multi($arrayOne, $arrayTwo)
    {
        # get rid of keys
        $valuesOne = array_values($arrayOne);
        $valuesTwo = array_values($arrayTwo);

        //create return array
        $output = [];

        # loop that shizzle
        for ($i = 0; $i < count($valuesOne); $i++)
        {
            $output[$i] = $valuesOne[$i] + (!empty($valuesTwo[$i]) ? $valuesTwo[$i] : 0);
        }

        return $output;
    }

    $result = array_sum_multi([0.00, 4350.00, 150.00, 50.00], [0.00, 0.00, 34.83]);

    # then for your keys:
    $result = array_combine(array_keys($yourFirstArray), $result);

    echo '<pre>'. print_r($result, 1) .'
';
1 голос
/ 08 июля 2019
$result = $first_array; // just copy array into result

// scan second array
foreach ($second_array as $k => $v) {
   // if key already exists, then add, else just set
   $result[$k] = isset($result[$k]) ? ($result[$k] + $v) : $v;
}

// done
print_r($result);
1 голос
/ 08 июля 2019

Вы можете использовать array_keys, чтобы получить уникальные значения из обоих массивов, а затем перебрать ключи к некоторым из них

$r = [];
$keys = array_keys($a1+$a2);
foreach($keys as $v){
  $r[$v] = (empty($a1[$v]) ? 0 : $a1[$v]) + (empty($a2[$v]) ? 0 : $a2[$v]);
}

Рабочий ДЕМО

0 голосов
/ 08 июля 2019

Попробуйте этот простой метод, спасибо,

$sum = [];
foreach($firstArray as $key => $value){
    if(array_key_exists($key,$secondArray)){
        $newArray = [$key=>$value+$secondArray[$key]]; 
        $sum = array_merge($sum,$newArray);
    }else{
        $newArray = [$key=>$value]; 
        $sum = array_merge($sum,$newArray);
    }
}

//your final required result
var_dump($sum);
0 голосов
/ 08 июля 2019

Попробуйте,

$a1 = array (
        '01-1970' => 0.00,
        '03-2019' => 4350.00,
        '05-2019' => 150.00,
        '06-2019' => 50.00
    );

$a2 = array (
        '03-2019' => 0.00,
        '04-2019' => 0.00,
        '06-2019' => 34.83
    );

$sums = array();
foreach (array_keys($a1 + $a2) as $key) {
    $sums[$key] = @($a1[$key] + $a2[$key]);
}

echo "<pre>";
print_r($sums);

Здесь - это другое решение, которое вы можете использовать.

Cheer!

0 голосов
/ 08 июля 2019

Простой способ реализовать это - циклически проходить через каждый массив и добавлять его в общий массив с тем же ключом.

Зацикливание только одного массива приведет к отсутствию нескольких элементов, если первый массив меньше второго или если какой-либо элемент из второго массива отсутствует в первом.

Итак, давайте просто пройдемся по ним обоим и добавим их к сумме.

$sum = [];

foreach($firstArray as $key => $value){
  $sum[$key] = $value + (isset($sum[$key]) ? $sum[$key] : 0.0);
}
foreach($secondArray as $key => $value){
  $sum[$key] = $value + (isset($sum[$key]) ? $sum[$key] : 0.0);
}

print_r($sum);
0 голосов
/ 08 июля 2019
$sumArray = [];

foreach($firstArray as $key => $value) {
    $sumArray[$key] = $value + ($secondArray[$key] ?? 0);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...