Сравните 2 массива по подобию - PullRequest
0 голосов
/ 01 ноября 2010

Как бы я сравнил 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] => ace [1] => elephant)

Ответы [ 3 ]

3 голосов
/ 01 ноября 2010

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

0 голосов
/ 06 августа 2018

PHP имеет функцию array_intersect () , которая может сделать это. Например, ypo может поместить следующий код в 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>');
?>
0 голосов
/ 01 ноября 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...