php - 两个数组合并。如果名称相同,判断后面的字段后合并,不同的追加到后面
巴扎黑
巴扎黑 2017-04-11 10:04:29
[PHP讨论组]

两个数组分别为

        $list1=[
            ['name'=> '好好','other'=> '1'],
            ['name'=> '新保','other'=> '2'],
            ['name'=> '天天','other'=> '3'],
            ['name'=> '向上','other'=> '4'],
            ['name'=> '哈哈','other'=> '5'],
            ['name'=> '哈23哈','other'=> '6']
        ];
        $list2=[
            ['name'=> '好好','other'=> '7'],
            ['name'=> '新保','other'=> '8'],
            ['name'=> '天123天','other'=> '9'],
            ['name'=> '向dd上','other'=> '10'],
            ['name'=> '哈dd哈','other'=> '11']
        ];
        

需合并成下面数组的效果

        $list=[
            ['name'=> '好好','other'=> '1'],
            ['name'=> '新保','other'=> '2'],
            ['name'=> '天天','other'=> '3'],
            ['name'=> '向上','other'=> '4'],
            ['name'=> '哈哈','other'=> '5'],
            ['name'=> '哈23哈','other'=> '6'],
             ['name'=> '天123天','other'=> '9'],
            ['name'=> '向dd上','other'=> '10'],
            ['name'=> '哈dd哈','other'=> '11']
        ];
        
        

可能我写的有点简单了。没有说清楚。。两个数组的长度并不一样的情况下,你们的答案全都不行.
现在补充下问题。。两个数组长度不同。如果name 值相同的情况下,需根据后面的other字段来判断后进行合并,其它name值不同的项。直接追加到后面

巴扎黑
巴扎黑

全部回复(3)
PHP中文网
你参考一下这个例子就对了
$arr = array(

    array(
        'id'=>'1',
        'name' => '张三'
        ),
    array(
        'id'=>'2',
        'name' => '张三'
        ),
    array(
        'id'=>'1',
        'name' => '李四'
        )
);
$item = array();

foreach($arr as $k=>$v){

if(!isset($item[$v['name']])){
    $item[$v['name']]=$v;
}else{
    $item[$v['name']]['id']+=$v['id'];
}
}
print_r(array_values($item));
PHP中文网

我也觉得题主例子有问题?

//先合并再去重
$list1=[

            ['name'=> '好好','float_minimum_order_amount'=> '1'],
            ['name'=> '新保挪威三文鱼','float_minimum_order_amount'=> '2'],
            ['name'=> '天天','float_minimum_order_amount'=> '3'],
            ['name'=> '向上','float_minimum_order_amount'=> '4'],
            ['name'=> '哈哈','float_minimum_order_amount'=> '5']
        ];
        $list2=[
            ['name'=> '好好','float_minimum_order_amount'=> '7'],
            ['name'=> '新保挪威三文鱼','float_minimum_order_amount'=> '8'],
            ['name'=> '天123天','float_minimum_order_amount'=> '9'],
            ['name'=> '向dd上','float_minimum_order_amount'=> '10'],
            ['name'=> '哈dd哈','float_minimum_order_amount'=> '11']
        ];
        $res=[];
        foreach(array_merge($list1,$list2) as $k=>$v){
            if(!isset($res[$v['name']])){
               $res[$v['name']]=$v;
            }
        }
        print_r(array_values($res));
        
        Array
(
    [0] => Array
        (
            [name] => 好好
            [float_minimum_order_amount] => 1
        )

    [1] => Array
        (
            [name] => 新保挪威三文鱼
            [float_minimum_order_amount] => 2
        )

    [2] => Array
        (
            [name] => 天天
            [float_minimum_order_amount] => 3
        )

    [3] => Array
        (
            [name] => 向上
            [float_minimum_order_amount] => 4
        )

    [4] => Array
        (
            [name] => 哈哈
            [float_minimum_order_amount] => 5
        )

    [5] => Array
        (
            [name] => 天123天
            [float_minimum_order_amount] => 9
        )

    [6] => Array
        (
            [name] => 向dd上
            [float_minimum_order_amount] => 10
        )

    [7] => Array
        (
            [name] => 哈dd哈
            [float_minimum_order_amount] => 11
        )

)
阿神
//找出name相同的元素
$diff = array_diff(array_column($list2, 'name'), array_column($list1, 'name'));
//获得与list1 中不重复的值
$diff_items = array_intersect_key($list2, $diff);
//合并数组,得到结果
$res = array_merge($list1, $diff_items);
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号