首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP在相同的键和值上合并两个数组

PHP在相同的键和值上合并两个数组
EN

Stack Overflow用户
提问于 2016-05-20 17:28:09
回答 1查看 4.8K关注 0票数 5

我有两个数组。我想在相同的键和值上合并它们。如果它们具有相同的ur_user_id,则它们将被合并。array2只为array1提供了一些额外的数据,因此new_array.length = array1.lengtharray1只是从array2获取额外的数据。

$array1 =    
    array(
        array('ur_user_id'=> 1,'ur_fname'=>'PerA','ur_lname'=>'SonA'),
        array('ur_user_id'=> 2,'ur_fname'=>'PerB','ur_lname'=>'SonB'),
        array('ur_user_id'=> 3,'ur_fname'=>'PerC','ur_lname'=>'SonC'),
    );
$array2 = 
    array(
        array('ur_user_id' => 5,'ur_code' => 'EE','ur_user_role' => 'testE'),
        array('ur_user_id' => 4,'ur_code' => 'DD','ur_user_role' => 'testD'),
        array('ur_user_id' => 6,'ur_code' => 'FF','ur_user_role' => 'testF'),
        array('ur_user_id' => 3,'ur_code' => 'CC','ur_user_role' => 'testC'),
        array('ur_user_id' => 1,'ur_code' => 'AA','ur_user_role' => 'testA'),
        array('ur_user_id' => 2,'ur_code' => 'BB','ur_user_role' => 'testB'),
    );    

那么新的数组必须如下所示。它将同时具有来自array1array2的值。

$new_array =    
    array(
        array('ur_user_id'=> 1,'ur_fname'=>'PerA','ur_lname'=>'SonA','ur_code' => 'AA','ur_user_role' => 'testA'),
        array('ur_user_id'=> 2,'ur_fname'=>'PerB','ur_lname'=>'SonB','ur_code' => 'BB','ur_user_role' => 'testB'),
        array('ur_user_id'=> 3,'ur_fname'=>'PerC','ur_lname'=>'SonC','ur_code' => 'CC','ur_user_role' => 'testC'),
    );

array1.length始终小于或等于array2.length,从不大于。并且这两个数组的顺序并不总是有序的。我已经尝试了下面的函数,我在这里的某个地方得到的,但它对我来说不起作用,而且我不太擅长循环。

function merge_common_keys(){
    $arr = func_get_args();
    $num = func_num_args();

    $keys = array();
    $i = 0;
    for ($i=0; $i<$num; ++$i){
        $keys = array_merge($keys, array_keys($arr[$i]));
    }
    $keys = array_unique($keys);

    $merged = array();

    foreach ($keys as $key){
        $merged[$key] = array();
        for($i=0; $i<$num; ++$i){
            $merged[$key][] = isset($arr[$i][$key]) ? $arr[$i][$key] : null;
        }
    }
    return $merged;
}

基于给定的数组,结果如下所示。它只在相同的键上合并。

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [ur_user_id] => 1
                    [ur_fname] => PerA
                    [ur_lname] => SonA
                )

            [1] => Array
                (
                    [ur_user_id] => 5
                    [ur_code] => AA-BB-CC
                    [ur_user_role] => testE
                )

        )
EN

回答 1

Stack Overflow用户

发布于 2016-05-20 17:37:04

你最好这样做:

Working Example

$ids = array();
$out = array();
foreach($array1 as $key => $value){
    if(isset($array2[$key]))
        $out[$key][] = $array2[$key];
    $out[$key][] = $value;
    $ids[] = $array2[$key]['ur_user_id'];
}

foreach($array2 as $key => $val){
    if(!in_array($val['ur_user_id'], $ids))
        $out[$key][] = $array2[$key];
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37342992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档