Відповіді:
Перетинайте цілі з копицею сіна і переконайтесь, що перетин точно дорівнює цілям:
$haystack = array(...);
$target = array('foo', 'bar');
if(count(array_intersect($haystack, $target)) == count($target)){
// all of $target is in $haystack
}
Зауважте, що вам потрібно лише перевірити розмір результуючого перетину такого ж розміру, як масив цільових значень, щоб сказати, що $haystack
це супернабір $target
.
Щоб переконатися, що принаймні одне значення в $target
також є $haystack
, ви можете зробити цю перевірку:
if(count(array_intersect($haystack, $target)) > 0){
// at least one of $target is in $haystack
}
Як розробник, ви, ймовірно, повинні почати вивчати задані операції (різниця, з'єднання, перетин). Ви можете уявити свій масив як один "набір", а ключі, за якими ви шукаєте інший.
function in_array_all($needles, $haystack) {
return empty(array_diff($needles, $haystack));
}
echo in_array_all( [3,2,5], [5,8,3,1,2] ); // true, all 3, 2, 5 present
echo in_array_all( [3,2,5,9], [5,8,3,1,2] ); // false, since 9 is not present
function in_array_any($needles, $haystack) {
return !empty(array_intersect($needles, $haystack));
}
echo in_array_any( [3,9], [5,8,3,1,2] ); // true, since 3 is present
echo in_array_any( [4,9], [5,8,3,1,2] ); // false, neither 4 nor 9 is present
Виходячи з відповіді @Rok Kralj (найкраще ІМО), щоб перевірити, чи існує якась голка в стозі сіна, ви можете використовувати її, (bool)
замість !!
якої іноді може бути заплутаною під час огляду коду.
function in_array_any($needles, $haystack) {
return (bool)array_intersect($needles, $haystack);
}
echo in_array_any( array(3,9), array(5,8,3,1,2) ); // true, since 3 is present
echo in_array_any( array(4,9), array(5,8,3,1,2) ); // false, neither 4 nor 9 is present
ІМХО найкраще вирішує цю проблему Марк Еліот. Якщо вам потрібно зробити більш складні операції порівняння між елементами масиву І ви перебуваєте на PHP 5.3, ви також можете подумати про щось на кшталт наступного:
<?php
// First Array To Compare
$a1 = array('foo','bar','c');
// Target Array
$b1 = array('foo','bar');
// Evaluation Function - we pass guard and target array
$b=true;
$test = function($x) use (&$b, $b1) {
if (!in_array($x,$b1)) {
$b=false;
}
};
// Actual Test on array (can be repeated with others, but guard
// needs to be initialized again, due to by reference assignment above)
array_walk($a1, $test);
var_dump($b);
Це спирається на закриття; Функція порівняння може стати набагато потужнішою. Удачі!
if(empty(array_intersect([21,22,23,24], $check_with_this)) {
print "Not found even a single element";
} else {
print "Found an element";
}
array_intersect () повертає масив, що містить усі значення масиву1, які є у всіх аргументах. Зауважте, що ключі збережені.
Повертає масив, що містить усі значення масиву1, значення яких існують у всіх параметрах.
empty () - Визначте, чи є змінною порожньою
Повертає FALSE, якщо var існує і має не порожнє, ненульове значення. В іншому випадку повертається ІСТИНА.