为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
叮当猫咪 2023-07-08 20:59:03
我有两个数组,如 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_recursive() 。它也不起作用。谁能帮我吗?提前致谢。
查看完整描述

1 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

以下逻辑可能会帮助您:

  1. 为每个顶级数组键指定月份名称 ( rekey())

  2. 合并两个数组

  3. 对结果集进行排序 ( $result)

<?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

工作演示


查看完整回答
反对 回复 2023-07-08
  • 1 回答
  • 0 关注
  • 118 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号