加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 如何通过仅接收第二个数组中与第一个数组具有相同键的值

发布时间:2020-12-13 18:18:58 所属栏目:PHP教程 来源:网络整理
导读:我想将两个数组相互合并: $filtered = array(1 = 'a',3 = 'c');$changed = array(2 = 'b*',3 = 'c*'); 合并应该包括$filtered的所有元素,以及所有那些在$filtered中具有相应键的$更改的元素: $merged = array(1 = 'a',3 = 'c*'); array_merge($filtered,$c
我想将两个数组相互合并:
$filtered = array(1 => 'a',3 => 'c');
$changed = array(2 => 'b*',3 => 'c*');

合并应该包括$filtered的所有元素,以及所有那些在$filtered中具有相应键的$更改的元素:

$merged = array(1 => 'a',3 => 'c*');

array_merge($filtered,$changed)也会将$changed的附加键添加到$filtered中.所以它并不适合.

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

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

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

如果我正确理解你的逻辑,那应该这样做:
array_intersect_key($changed,$filtered) + $filtered

执行:

$filtered = array(1 => 'a',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;
}

输出:

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读