Сравните 2 массива на сходство

Как бы я сравнил 2 массива в PHP, чтобы найти общие значения каждого массива.

Примером может быть

Массив 1

Array
(
    [0] => ace
    [1] => one
    [2] => five
    [3] => nine
    [4] => elephant
)

Массив 2

Array
(
    [0] => elephant
    [1] => seven
    [2] => ace
    [3] => jack
    [4] => queen
)

Вывод Массив ( [0] => туз [1] => слон )


person Joseph    schedule 31.10.2010    source источник


Ответы (3)


Это может сделать функция array_intersect.

person Vincent Savard    schedule 31.10.2010

В PHP есть функция array_intersect(), которая может это сделать. Например, вы можете поместить следующий код в PHPFiddle для тестирования:

<?php
    $array1 = array('ace', 'one', 'five', 'nine', 'elephant');
    $array2 = array('elephant', 'seven', 'ace', 'jack', 'queen');

    print_r($array1); print('<br>');
    print_r($array2); print('<br>');
    print_r(array_intersect($array1, $array2)); print('<br>');
?>

Затем вы увидите, что он дает вам то, что вы хотите (переформатирован для удобства чтения):

Array ( [0] => ace
        [1] => one
        [2] => five
        [3] => nine
        [4] => elephant )

Array ( [0] => elephant
        [1] => seven
        [2] => ace
        [3] => jack
        [4] => queen )

Array ( [0] => ace
        [4] => elephant ) 

Обратите внимание, что на самом деле это не дает вам последовательных ключей в результате, кажется, что ключи исходят из первого массива, переданного array_intersect(). Если важно, чтобы вы получили массив с последовательной индексацией, вам может потребоваться шаг постобработки для его настройки. Что-то вроде этого должно быть хорошим началом (модификация исходной скрипки для использования последовательных индексов):

<?php
    $array1 = array('ace', 'one', 'five', 'nine', 'elephant');
    $array2 = array('elephant', 'seven', 'ace', 'jack', 'queen');

    print_r($array1); print('<br>');
    print_r($array2); print('<br>');

    $array3 = array();
    foreach (array_intersect($array1, $array2) as $val) {
        array_push($array3, $val);
    }
    print_r($array3); print('<br>');
?>
person paxdiablo    schedule 06.08.2018

Если вы работаете с языком, в котором нет встроенного пересечения, но у вас есть хэши, вы просто добавляете все элементы одного массива в хэш, а затем проходите второй массив, проверяя, есть ли они в хэше, который вы только что построили.

Это все, если вы не заботитесь о порядке. Если вы заботитесь о порядке, это просто цикл for, который проверяет, если a[i] == b[i]

person xaxxon    schedule 01.11.2010