Быстрый способ объединить массивы в PHP, сохраняя только ключи, которые встречаются в обоих? - PullRequest
0 голосов
/ 19 ноября 2011

Мне нужно объединить несколько массивов вместе, но я хочу только сохранить ключи, содержащиеся в обоих (или всех) массивах.

* 1003 Е.Г. *

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

И в итоге я должен получить только ключи one и two. Предпочтительно, чтобы значения добавлялись вместе, но если выбрано только одно из них, все в порядке, значения не так важны.

Как это сделать, не перебирая все?

Мне не нужен какой-то код, который просто просматривает все это и проверяет, существует ли во всех них, а затем создает новый массив, я мог бы написать это, и это будет очень медленно. У меня много данных для обработки, поэтому я надеюсь, что есть эффективный способ сделать это.

1 Ответ

3 голосов
/ 19 ноября 2011

То, что вам нужно, это пересечение , и для него уже есть функции :

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

Чтобы также объединить значения (под этим, я полагаю, вы подразумеваете add ?):

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

(Обратите внимание, что здесь используется синтаксис анонимной функции PHP 5.3.)

Предполагается, что оба ключа массива имеют в порядке , однако, это немного сложнее, если это не так.

...