PHP数组\忽略不在第一个/基数组中的键值的合并

PHP数组\忽略不在第一个/基数组中的键值的合并,php,arrays,Php,Arrays,我想知道是否有一个函数会合并两个或多个数组,但会忽略第一个/基数组中不包含的任何键值 下面是一个快速的例子,说明了我正在使用当前结果和我正在寻找的结果做什么 <?php $array1 = array('a' => 1, 'b' => 2); $array2 = array('b' => 3, 'c' => 4); $result = array_merge($array1, $array2); // current result // $result = ar

我想知道是否有一个函数会合并两个或多个数组,但会忽略第一个/基数组中不包含的任何键值

下面是一个快速的例子,说明了我正在使用当前结果和我正在寻找的结果做什么

<?php

$array1 = array('a' => 1, 'b' => 2);
$array2 = array('b' => 3, 'c' => 4);
$result = array_merge($array1, $array2);

// current result
// $result = array('a' => 1,'b' => 3, 'c' => 4);

// what i would like
// $result = array('a' => 1,'b' => 3);

?>

这是我刚刚写的一个快速示例:

function array_merge_custom(){
    //get all the arguments
    $arrays = func_get_args();

    //get the first argument
    $first = array_shift($arrays);

    //loop over the first argument by key and value
    foreach($first as $key=>&$value){
        //loop over remaining arrays
        foreach($arrays as $otherArray){
            //check if key from first array exists in subsequent array
            if(array_key_exists($key, $otherArray)){
                //overwrite value
                $value = $otherArray[$key];
            }
        }
    }
    //return the first array with new values
    return $first;
}

这样做的好处是,它适用于任意数量的数组,而不仅仅是2个。

请求“忽略第一个/基本数组中不包含的任何键值”调用


array\u intersect\u key($array2,$array1)
比较
$array2
$array1
的键,并保留
$array2
中与两个数组公用键相关联的值。

我自己也遇到过类似的问题。以下是我的解决方法:

<?php $array1 = array('a' => 1, 'b' => 2);
$array2 = array('b' => 3, 'c' => 4);
$result = array_intersect_key($array2, $array1) + $array1; ?>


请记住,如果您希望第二个数组具有更高的优先级,您应该尊重顺序。

我不知道内置了什么,但很容易创建您自己的。@JonathanKuhn我查阅了所有文档,但找不到我要找的内容,感谢您的确认。幸运的是,我创建了新发现的元素。否则,它将完全起作用。应该是一个标志来禁用此选项。我将发布完全相同的内容,但提到它仅适用于2个阵列。这正是我想要做的,感谢您为我指明了正确的方向,我不知道为什么我会绊倒this@AbraCadaver没有什么能阻止您添加多少额外的
array\u intersect\u键($arrayN,$array1)
您想在调用
数组\u merge()
时使用它。
<?php $array1 = array('a' => 1, 'b' => 2);
$array2 = array('b' => 3, 'c' => 4);
$result = array_intersect_key($array2, $array1) + $array1; ?>