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

我想将两个数组相互合并:
$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*"
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


如何选择合适的 C++ Web 开发框架?
利用 C++ 框架构建高并发 Web 应用的策略
用 C++ 框架开发跨平台图形应用程序
golang框架中安全编码实践的最佳指南是什么?
golang框架与其他语言框架在设计理念上的区别有哪些?
C++ 图形框架与其他语言框架的比较
C++ 框架与其他 Web 开发框架的对比分析
使用 C++ 框架构建大型项目最佳实践
C++ 框架如何提高大型项目开发效率
C++ 框架中依赖注入的持续集成与部署工具
如何与社区协作和贡献到自定义 Golang 框架?
C++ 框架在大型项目中如何实现模块化开发
使用 C++ 框架开发跨平台 Web 应用
C++ 框架在大型项目中的优缺点
golang框架在性能上的优势体现在哪些方面?
C++ 框架在嵌入式系统内存优化中的优势
golang框架在人工智能与机器学习中的作用
如何扩展 Golang 框架以支持特定功能?
如何利用 Go Modules 和依赖项管理来自定义 Golang 框架?
Golang 框架中的性能优化技巧