PHP, сравнивающий 2 массива для существования значения в каждом - PullRequest
2 голосов
/ 14 января 2011

У меня есть 2 массива. Я просто хочу знать, присутствует ли одно из значений в массиве 1 в массиве 2. Не что иное, как возвращение логического true или false

Пример A:

$a = array('able','baker','charlie');
$b = array('zebra','yeti','xantis');

Ожидаемый результат = ложь

Пример B:

$a = array('able','baker','charlie');
$b = array('zebra','yeti','able','xantis');

Ожидаемый результат = true

Итак, было бы лучше использовать array_diff () или array_search () или какую-нибудь другую простую функцию PHP?

Спасибо!

Ответы [ 4 ]

5 голосов
/ 14 января 2011

Простой способ сделать это - использовать array_intersect и проверить, не является ли он пустым.

$a = array('able','baker','charlie');
$b = array('zebra','yeti','xantis');

echo !!array_intersect($a, $b) ? 'true' : 'false'; //false

$a = array('able','baker','charlie');
$b = array('zebra','yeti','able','xantis');

echo !!array_intersect($a, $b) ? 'true' : 'false'; //true

Или вы можете сделать простую функцию, чтобы проверить, есть ли хотя бы одно пересечение.Это быстрее, чем первый, потому что он не должен найти все пересечения.Когда он находит его, он возвращает истину в тот момент.

function check_for_intersect($a, $b) {
    $c = array_flip($a);
    foreach ($b as $v) {
        if (isset($c[$v])) return true;
    }
    return false;
}

$a = array('able','baker','charlie');
$b = array('zebra','yeti','xantis');

echo check_for_intersect($a, $b) ? 'true' : 'false';

$a = array('able','baker','charlie');
$b = array('able','zebra','yeti','xantis');

echo check_for_intersect($a, $b) ? 'true' : 'false';
4 голосов
/ 14 января 2011

Вы можете сделать что-то с array_intersect ()

, если вы хотите проверить на определенное количество совпадений:

if (count(array_intersect($a, $b)) == 1)
{
// > 0, one or more elements from $a is also in $b
// == 1, one element matches, etc.
}

Если вы просто хотите посмотреть, есть ли там какой-либо элемент:

$new = array_intersect($a, $b);

if (!empty($new)) { ... }
1 голос
/ 14 января 2011

Вы можете использовать array_intersect () для этого!

0 голосов
/ 14 января 2011

Я обнаружил, что использование поиска по массиву

function check_for_intersect($a, $b)
    foreach($a as $h)
        if (array_search($h,$b) !== false) {
            return true;
        }
    return false;
}

намного быстрее, чем выполнение array_intersect при использовании массивов с большим количеством элементов, потому что вы можете сэкономить много времени, выполняя поиск только по первому появлению элемента, а не по всем.

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