0

我需要将多个数组合并在一起,但我只想保留两个(或所有)数组中包含的键。

例如

$a1 = array('one'=>2,'two'=>5,'three'=>4);
$a2 = array('one'=>5,'two'=>3);
$a3 = special_merge($a1,$a2);

我最终应该只有键onetwo. 最好将这些值相加,但如果只选择其中一个也可以,这些值并不那么重要。

如何在不必遍历所有内容的情况下做到这一点?

我不想要一些代码只是循环遍历它,并检查它们是否存在然后构建一个新数组,我可以写它,它会很慢。我有很多数据要处理,所以我希望有一种有效的方法可以做到这一点。

4

1 回答 1

3

您正在寻找的是一个交集,并且已经有它的功能

$a3 = array_keys(array_intersect_key($a1, $a2));

还要合并值(我猜你的意思是添加?):

$a3 = array_map(function ($a1, $a2) { return $a1 + $a2; },
                array_intersect_key($a1, $a2),
                array_intersect_key($a2, $a1));

(请注意,这使用 PHP 5.3 匿名函数语法。)

这假设两个数组键都是有序的,如果它们不是,它会更复杂一些。

于 2011-11-19T10:22:25.440 回答