如何通过仅接管第二个数组中与第一个数组具有相同键的值来合并两个数组?

hak*_*kre 8 php arrays filter array-merge array-key

我想将两个数组相互合并:

$filtered = array(1 => 'a', 3 => 'c');
$changed = array(2 => 'b*', 3 => 'c*');
Run Code Online (Sandbox Code Playgroud)

合并应包括其中所有元素的$filtered所有元素以及$changed具有相应键的所有元素$filtered:

$merged = array(1 => 'a', 3 => 'c*');
Run Code Online (Sandbox Code Playgroud)

array_merge($filtered, $changed)将增加的附加键$changed进入$filtered为好.所以它并不适合.

我知道我可以$keys = array_intersect_key($filtered, $changed)用来获取两个数组中存在的密钥,这已经是工作的一半.

但是我想知道是否有任何(本机)函数可以将$changed数组减少到具有$keys指定的数组array_intersect_key?我知道我可以使用array_filter回调函数并在$keys其中进行检查,但是可能还有一些其他纯粹的本机函数只能从一个可以指定键的数组中提取那些元素?

我问,因为本机函数通常比array_filter回调快得多.

dec*_*eze 17

如果我正确理解你的逻辑,这应该这样做:

array_intersect_key($changed, $filtered) + $filtered
Run Code Online (Sandbox Code Playgroud)

执行:

$filtered = array(1 => 'a', 3 => 'c');
$changed = array(2 => 'b*', 3 => 'c*');
$expected = array(1 => 'a', 3 => 'c*');    
$actual = array_key_merge_deceze($filtered, $changed);

var_dump($expected, $actual);

function array_key_merge_deceze($filtered, $changed) {
    $merged = array_intersect_key($changed, $filtered) + $filtered;
    ksort($merged);
    return $merged;
}
Run Code Online (Sandbox Code Playgroud)

输出:

Expected:
array(2) {
  [1]=>
  string(1) "a"
  [3]=>
  string(2) "c*"
}

Actual:
array(2) {
  [1]=>
  string(1) "a"
  [3]=>
  string(2) "c*"
}
Run Code Online (Sandbox Code Playgroud)