合并表取决于相同的键

时间:2017-12-05 11:47:02

标签: php arrays merge

我想将两个PHP数组合并到第三个数组,我希望将它们依赖于相同的键data。我在两个数组中都有data个密钥,我想留下来。我想要依赖First array。我的意思是我将第一个数组加载到final_array(),接下来我将第三个密钥从第二个ESTYMACJA添加为array,但是从已加载的data密钥添加到同一个data final_array()。如果data中没有final_array()个密钥,则算法应将此密钥添加到final_array(),添加WYKONANIA并复制ESTYMACJA。如果可能的话,我也会将ESTYMACJA复制到其余的data个密钥中。我会在final_array()期望中表明我的意思。

第一阵列:

$my_array=[
    ['data'=>'2017-11-27','ESTYMACJA'=>5000],
    ['data'=>'2017-11-30','ESTYMACJA'=>9000]
];

第二阵列:

$new_array=[
    ['data'=>'2017-11-01','WYKONANIA'=>3],
    ['data'=>'2017-11-02','WYKONANIA'=>10],
    ['data'=>'2017-11-03','WYKONANIA'=>303],
    ['data'=>'2017-11-04','WYKONANIA'=>327],
    ['data'=>'2017-11-05','WYKONANIA'=>652],
    ['data'=>'2017-11-06','WYKONANIA'=>812],
    ['data'=>'2017-11-07','WYKONANIA'=>817],
    ['data'=>'2017-11-08','WYKONANIA'=>870],
    ['data'=>'2017-11-09','WYKONANIA'=>1070],
    ['data'=>'2017-11-10','WYKONANIA'=>1199],
    ['data'=>'2017-11-11','WYKONANIA'=>1206],
    ['data'=>'2017-11-12','WYKONANIA'=>1220],
    ['data'=>'2017-11-13','WYKONANIA'=>1421],
    ['data'=>'2017-11-14','WYKONANIA'=>1440],
    ['data'=>'2017-11-15','WYKONANIA'=>1904],
    ['data'=>'2017-11-16','WYKONANIA'=>1910],
    ['data'=>'2017-11-17','WYKONANIA'=>1962],
    ['data'=>'2017-11-18','WYKONANIA'=>2234],
    ['data'=>'2017-11-19','WYKONANIA'=>2305],
    ['data'=>'2017-11-20','WYKONANIA'=>2325],
    ['data'=>'2017-11-21','WYKONANIA'=>2250],
    ['data'=>'2017-11-22','WYKONANIA'=>2263],
    ['data'=>'2017-11-23','WYKONANIA'=>2821],
    ['data'=>'2017-11-24','WYKONANIA'=>2890],
    ['data'=>'2017-11-25','WYKONANIA'=>3411],
    ['data'=>'2017-11-26','WYKONANIA'=>3443],
    ['data'=>'2017-11-27','WYKONANIA'=>3501],
    ['data'=>'2017-11-28','WYKONANIA'=>4032]
];

final_array()期望:

Array
(
    [0] => Array
        (
            [data] => 2017-11-01
            [WYKONANIA] => 3
            [ESTYMACJA] => 5000
        )

    [1] => Array
        (
            [data] => 2017-11-02
            [WYKONANIA] => 10
            [ESTYMACJA] => 5000
        )

    [2] => Array
        (
            [data] => 2017-11-03
            [WYKONANIA] => 303
            [ESTYMACJA] => 5000
        )

    [3] => Array
        (
            [data] => 2017-11-04
            [WYKONANIA] => 327
            [ESTYMACJA] => 5000
        )

    [4] => Array
        (
            [data] => 2017-11-05
            [WYKONANIA] => 652
            [ESTYMACJA] => 5000
        )

    [5] => Array
        (
            [data] => 2017-11-06
            [WYKONANIA] => 812
            [ESTYMACJA] => 5000
        )

    [6] => Array
        (
            [data] => 2017-11-07
            [WYKONANIA] => 817
            [ESTYMACJA] => 5000
        )

    [7] => Array
        (
            [data] => 2017-11-08
            [WYKONANIA] => 870
            [ESTYMACJA] => 5000
        )

    [8] => Array
        (
            [data] => 2017-11-09
            [WYKONANIA] => 1070
            [ESTYMACJA] => 5000
        )

    [9] => Array
        (
            [data] => 2017-11-10
            [WYKONANIA] => 1199
            [ESTYMACJA] => 5000
        )

    [10] => Array
        (
            [data] => 2017-11-11
            [WYKONANIA] => 1206
            [ESTYMACJA] => 5000
        )

    [11] => Array
        (
            [data] => 2017-11-12
            [WYKONANIA] => 1220
            [ESTYMACJA] => 5000
        )

    [12] => Array
        (
            [data] => 2017-11-13
            [WYKONANIA] => 1421
            [ESTYMACJA] => 5000
        )

    [13] => Array
        (
            [data] => 2017-11-14
            [WYKONANIA] => 1440
            [ESTYMACJA] => 5000
        )

    [14] => Array
        (
            [data] => 2017-11-15
            [WYKONANIA] => 1904
            [ESTYMACJA] => 5000
        )

    [15] => Array
        (
            [data] => 2017-11-16
            [WYKONANIA] => 1910
            [ESTYMACJA] => 5000
        )

    [16] => Array
        (
            [data] => 2017-11-17
            [WYKONANIA] => 1962
            [ESTYMACJA] => 5000
        )

    [17] => Array
        (
            [data] => 2017-11-18
            [WYKONANIA] => 2234
            [ESTYMACJA] => 5000
        )

    [18] => Array
        (
            [data] => 2017-11-19
            [WYKONANIA] => 2305
            [ESTYMACJA] => 5000
        )

    [19] => Array
        (
            [data] => 2017-11-20
            [WYKONANIA] => 2325
            [ESTYMACJA] => 5000
        )

    [20] => Array
        (
            [data] => 2017-11-21
            [WYKONANIA] => 2250
            [ESTYMACJA] => 5000
        )

    [21] => Array
        (
            [data] => 2017-11-22
            [WYKONANIA] => 2263
            [ESTYMACJA] => 5000
        )

    [22] => Array
        (
            [data] => 2017-11-23
            [WYKONANIA] => 2821
            [ESTYMACJA] => 5000
        )

    [23] => Array
        (
            [data] => 2017-11-24
            [WYKONANIA] => 2890
            [ESTYMACJA] => 5000
        )

    [24] => Array
        (
            [data] => 2017-11-25
            [WYKONANIA] => 3411
            [ESTYMACJA] => 5000
        )

    [25] => Array
        (
            [data] => 2017-11-26
            [WYKONANIA] => 3443
            [ESTYMACJA] => 5000
        )

    [26] => Array
        (
            [data] => 2017-11-27
            [WYKONANIA] => 3501
            **[ESTYMACJA] => 5000**
        )

    [27] => Array
        (
            [data] => 2017-11-28
            [WYKONANIA] => 4032
            [ESTYMACJA] => 5000

        )

    *[28] => Array
        (
            [data] => 2017-11-30
            [WYKONANIA] => 4032
            [ESTYMACJA] => 9000

        )

这段代码已经是我已经完成的但是我现在卡住了。

$x = 0;
while ($x<count($final_array))
{
    if ($new_array == null) {
    break;
    }
    else {
        for ($i = 0; $i < count($new_array); $i++) {
            if ($final_array[$x]['data'] == ($new_array[$i]['data']) {
                $final_array[$x]['WYKONANIA'] = $new_array['WYKONANIA']; 
            }
            else {
                array_push($final_array, "data", $new_array[$i]['data']);
                array_push($final_array, "WYKONANIA", $new_array[$i]['WYKONANIA']);
                array_push($final_array, "ESTYMACJA", $final_array[$x]['ESTYMACJA']);
            }
        }
    }
    $x++;
}

$myArray - first array
$new_array - second array
$final_array - final array.

2 个答案:

答案 0 :(得分:0)

// sort my_array in descending order of dates
rsort($my_array);

foreach($new_array as &$x) {
   foreach($my_array as $i) {
     // Because your dates have a different format, convert them to timestamp
     if(strtotime($x['data']) > strtotime($i['data'])) {
       $x['ESTYMACJA'] = $i['ESTYMACJA'];
       break;
     }
   }
}

demo

答案 1 :(得分:-1)

这将有助于

bivpois