0

複数の配列をマージする必要がありますが、両方(またはすべて)の配列に含まれているキーのみを保持したいと思います。

例えば

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

そして、私はキーonetwo。できれば値を足し合わせますが、そのうちの1つだけを選択すれば、値はそれほど重要ではありません。

すべてをループすることなくこれを行う方法は?

すべてをループして、すべてに存在するかどうかをチェックしてから新しい配列を作成するコードは必要ありません。それを記述できますが、非常に時間がかかります。処理するデータがたくさんあるので、これを効率的に行う方法があることを望んでいます。

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 に答える