我想将两个数组相互合并:
$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 举报,一经查实,本站将立刻删除。