简体   繁体   English

PHP合并2个多维数组和和值的数组

[英]PHP Merge 2 arrays of multi-dimension arrays and sum value

I would like to merge those two arrays and make the sum of the value movements while keeping day . 我想合并这两个数组,并在保持day同时进行值movements的总和。

first array: 第一个数组:

array (30)
0 => array (2)
    day => "01" (2)
    movements => 49
1 => array (2)
    day => "02" (2)
    movements => 50
2 => array (2)
    day => "03" (2)
    movements => 54
...

second array : 第二个数组:

array (30)
0 => array (2)
    day => "01" (2)
    movements => 50
1 => array (2)
    day => "02" (2)
    movements => 51
2 => array (2)
    day => "03" (2)
    movements => 41
...

As a result I am expecting, an array of arrays with the same day index and the sum of movements : 因此,我期望得到一个具有相同day索引和movements总和的数组数组:

array (30)
0 => array (2)
    day => "01" (2)
    movements => 99
1 => array (2)
    day => "02" (2)
    movements => 101
2 => array (2)
    day => "03" (2)
    movements => 95
...

Any help would be greatly appreciated. 任何帮助将不胜感激。

It is even calculate movments if any array miss any day. 如果有阵列错过任何一天,它甚至可以计算运动。

<?php
$arrayFirst = [
    ['day' => '01', 'movements' => 10],
    ['day' => '02', 'movements' => 20],
    ['day' => '04', 'movements' => 40],
];

$arraySecond = [
    ['day' => '01', 'movements' => 15],
    ['day' => '03', 'movements' => 30],
    ['day' => '04', 'movements' => 45],
];

$arrColFirst = array_column($arrayFirst, 'movements', 'day');
$arrColSecond = array_column($arraySecond, 'movements', 'day');
$merrgedArray = array_merge($arrColFirst, $arrColSecond);

$result = [];
foreach ($merrgedArray as $day=> $movments) {
    $result[$day] =  [
        'day' => $day,
        'movements' => isset($arrColFirst[$day]) ? $arrColFirst[$day] + $movments : $movments,
    ];
}

sort($result);
$arr1 = [ ['day' => '01', 'movement' => 50], ['day' => '02', 'movement' => 10] ];
$arr2 = [ ['day' => '01', 'movement' => 20], ['day' => '02', 'movement' => 10] ];

$sum = [];

echo '<pre>';
print_r($arr1);
print_r($arr2);


if(!empty($arr1)){
    $result = [];
    foreach ($arr1 as $key => $value) {
        if(isset($arr2[$key]['day']) && $arr2[$key]['day'] == $value['day']){
            $result['day'] = $value['day'];
            $result['movement'] = $value['movement']+$arr2[$key]['movement'];
        }
        array_push($sum, $result);
    }
}

print_r($sum);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM