Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中合并两个不相等的多维数组?_Php_Arrays_Multidimensional Array_Array Merge - Fatal编程技术网

如何在PHP中合并两个不相等的多维数组?

如何在PHP中合并两个不相等的多维数组?,php,arrays,multidimensional-array,array-merge,Php,Arrays,Multidimensional Array,Array Merge,我有两个数组——JS小提琴中给出的多维数组。如果month1值相同,我想按升序将其合并为一个,否则按原样打印 $array1= [0] => Array ( [month1] => January [2020cs] => 84 [2020as] => 500 [2019cs] => 17

我有两个数组——JS小提琴中给出的多维数组。如果month1值相同,我想按升序将其合并为一个,否则按原样打印

    $array1= [0] => Array
            (
                [month1] => January
                [2020cs] => 84
                [2020as] => 500
                [2019cs] => 17
                [2019as] => 500
            )
    
        [1] => Array
            (
                [month1] => February
                [2020cs] => 54
                [2020as] => 200
                [2019cs] => 12
                [2019as] => 1000
            )
    
        [2] => Array
            (
                [month1] => April
                [2020cs] => 4
                [2020as] => 100
                [2019cs] => 12
                [2019as] => 1400
            )
    
        [3] => Array
            (
                [month1] => November
                [2020cs] => 0
                [2020as] => 0
                [2019cs] => 7
                [2019as] => 200
            )
    )

   
         $array2= [0] => Array
            (
                [month1] => January
                [2020cr] => 13
                [2020ar] => 300
                [2019cr] => 0
                [2019ar] => 0
            )
    
        [2] => Array
            (
                [month1] => March
                [2020cr] => 1
                [2020ar] => 100
                [2019cr] => 0
                [2019ar] => 0
            )
    
        [3] => Array
            (
                [month1] => November
                [2020cr] => 0
                [2020ar] => 0
                [2019cr] => 1
                [2019ar] => 800
            )
    
        [4] => Array
            (
                [month1] => December
                [2020cr] => 0
                [2020ar] => 0
                [2019cr] => 2
                [2019ar] => 500
            )
    
    )
我想把它合并如下

$array_merge= [0] => Array
            (
                [month1] => January
                [2020cs] => 84
                [2020as] => 500
                [2019cs] => 17
                [2019as] => 500
                [2020cr] => 13
                [2020ar] => 300
                [2019cr] => 0
                [2019ar] => 0
            )
[1] => Array
            (
                [month1] => February
                [2020cs] => 54
                [2020as] => 200
                [2019cs] => 12
                [2019as] => 1000
            )
[2] => Array
            (
                [month1] => March
                [2020cr] => 1
                [2020ar] => 100
                [2019cr] => 0
                [2019ar] => 0
            )
[3] => Array
            (
                [month1] => April
                [2020cs] => 4
                [2020as] => 100
                [2019cs] => 12
                [2019as] => 1400
            )
 [4] => Array
            (
                [month1] => November
                [2020cs] => 0
                [2020as] => 0
                [2019cs] => 7
                [2019as] => 200
                [2020cr] => 0
                [2020ar] => 0
                [2019cr] => 1
                [2019ar] => 800
            )
[4] => Array
            (
                [month1] => December
                [2020cr] => 0
                [2020ar] => 0
                [2019cr] => 2
                [2019ar] => 500
            )
    
    )
我还使用了array\u merge\u recursive()。它也不起作用。有人能帮我吗?
提前感谢。

以下逻辑可能会在路上帮助您:

  • 为每个顶级数组键指定月份名称(
    rekey()
  • 合并两个数组
  • 对结果集进行排序(
    $result

  • 发布数组时,请使用
    var\u export($array)
    功能,而不是
    print\r
    。否则,几乎不可能使用它。
    <?php
    
    // top-level array from indexed to associative (name of month)
    $array1 = rekey($array1);
    $array2 = rekey($array2);
    
    function rekey(array $arr = []): array
    {
        foreach ($arr as $key => $record) {
            $arr[$record['month1']] = $arr[$key]; // indexed to name of month
            unset($arr[$key]);
        }
        return $arr;
    }
    // run the merge
    $result = array_merge_recursive($array1, $array2);
    
    // clean up double entries key 'month1'
    foreach($result as $key => &$value) {
        if(is_array($value['month1'])) $value['month1'] = $value['month1'][0];
    }
    
    // prepare result set for sorting
    $months = ['January', 'February', 'March', 'April', 'May', 'June', 'July',
               'August', 'September', 'October', 'November', 'December'];
    foreach($result as $key0 => $value0) {
        foreach($months as $key1 => $value1) {
            if($key0 === $value1) {
                $result[$key1] = $result[$key0]; // set index based on month 0-11
                unset($result[$key0]);
            }
        }
    }
    ksort($result); // sort
    $result = array_values($result); // top-level array back to sequential index