合并两个关联数组并删除重复数组

时间:2014-06-01 21:59:30

标签: php arrays

我有两个关联键值对的数组。我想将它合并为一个,使得它们仍然是键,并且具有" on_time"在第一个数组中应该忽略第二个数组中该键的值。

这是我下面的两个数组

[att] => Array
        (
            [841] => on_time
            [842] => not_time
            [843] => not_time
        )

    [entatt] => Array
        (
            [841] => unexcused
            [842] => unexcused
            [843] => late
        )

我想要的预期输出是

[entatt] => Array
    (
        [841] => on_time
        [842] => unexcused
        [843] => late
    )

任何帮助?

2 个答案:

答案 0 :(得分:1)

这应该有效:

$result = array();
foreach ($att as $key => $value) {
    $result[$key] = $value !== 'on_time' ? $entatt[$key] : 'on_time';
}

答案 1 :(得分:0)

您正在寻找一种方法同时走两个数组,并应用一个函数,以便在发生碰撞时选择正确的条目。我不认为它有内置功能。<​​/ p>

function merge2($att, $entatt, $collision){
   $res = $att;
   foreach ($entatt as $key => $value) {
     if (isset($res[$key]))
       $res[$key] = $collision($res[$key],$value);
     else
       $res[$key] = $value;
   }
   return $res;
}

然后您应该可以按照以下方式使用它:

merge2($att,$entatt,function($v1,$v2){
   return $v1 !== 'on_time' ? $v2 : $v1;
});

$entatt$att包含不在另一个数组中的键时,它应该正确处理案例(尽管如果有必要,您的问题并不清楚。)