Ответ 1
Используйте array_diff()
:
$arr1 = array(1,2,3);
$arr2 = array(1,2,3,4,5,6,7);
$arr3 = array_diff($arr1, $arr2);
if (count($arr3) == 0) {
// all of $arr1 is in $arr2
}
У меня есть 2 массива, значение будет загружено из базы данных, ниже приведен пример:
$arr1 = array(1,2,3);
$arr2 = array(1,2,3,4,5,6,7);
Что я хочу сделать, это проверить, существует ли все значения в $arr1
в $arr2
. Вышеприведенный пример должен быть TRUE
, а:
$arr3 = array(1,2,4,5,6,7);
сравнение $arr1
с $arr3
вернет a FALSE
.
Обычно я использую in_array
, потому что мне нужно только проверить одно значение в массиве. Но в этом случае in_array
не может использоваться. Я хотел бы посмотреть, есть ли простой способ выполнить проверку с минимальным циклом.
ОБНОВЛЕНИЕ для уточнения.
Первый массив будет набором, содержащим уникальные значения. Второй массив может содержать дублирующиеся значения. Оба они гарантируют массив перед обработкой.
Используйте array_diff()
:
$arr1 = array(1,2,3);
$arr2 = array(1,2,3,4,5,6,7);
$arr3 = array_diff($arr1, $arr2);
if (count($arr3) == 0) {
// all of $arr1 is in $arr2
}
Вы можете использовать array_intersect или array_diff:
$arr1 = array(1,2,3);
$arr2 = array(1,2,3,4,5,6,7);
if ( $arr1 == array_intersect($arr1, $arr2) ) {
// All elements of arr1 are in arr2
}
Однако, если вам не нужно использовать результат пересечения (который, кажется, ваш случай), более простое и эффективное время использовать array_diff:
$arr1 = array(1,2,3);
$arr2 = array(1,2,3,4,5,6,7);
$diff = array_diff($arr1, $arr2);
if ( empty($diff) ) {
// All elements of arr1 are in arr2
}
Вы можете попробовать использовать функцию array_diff(), чтобы найти разницу между двумя массивами, это может вам помочь. Я думаю, чтобы вы поняли, что все значения в первом массиве должны быть во втором массиве, но не наоборот.
В моем конкретном случае мне нужно было проверить, была ли пара идентификаторов обработана до или нет. Так просто array_diff()
не работал у меня.
Вместо этого я сгенерировал ключи из идентификаторов, отсортированных по алфавиту, и использовал их с помощью in_array:
<?php
$pairs = array();
// ...
$pair = array($currentId, $id);
sort($pair);
$pair = implode('-', $pair);
if (in_array($pair, $pairs)) {
continue;
}
$pairs[$pair] = $pair;
Это, вероятно, не оптимальное решение, но я просто нуждался в нем для грязного script, который будет выполнен один раз.