Как проверить несколько значений, например:
$arg = array('foo','bar');
if(in_array('foo','bar',$arg))
Вот пример, чтобы вы поняли немного лучше, я знаю, что это не сработает.
Как проверить несколько значений, например:
$arg = array('foo','bar');
if(in_array('foo','bar',$arg))
Вот пример, чтобы вы поняли немного лучше, я знаю, что это не сработает.
Пересеките цели с помощью стога сена и убедитесь, что пересечение точно равно целям:
$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
if(in_array('foo',$arg) && in_array('bar',$arg)){
//both of them are in $arg
}
if(in_array('foo',$arg) || in_array('bar',$arg)){
//at least one of them are in $arg
}
Исходя из ответа @Rok Kralj (лучший IMO), чтобы проверить, существует ли какая-либо из игл в стоге сена, вы можете использовать (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
Решение IMHO Mark Elliot для решения этой проблемы. Если вам нужно выполнить более сложные операции сравнения между элементами массива И вы на 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() возвращает массив, содержащий все значения array1, которые присутствуют во всех аргументах. Обратите внимание, что ключи сохраняются.
Возвращает массив, содержащий все значения в массиве 1, значения которого существуют во всех параметрах.
empty() - определить, является ли переменная пустой
Возвращает FALSE, если var существует и имеет непустое ненулевое значение. В противном случае возвращается значение ИСТИНА.
Согласно PSR-12 (заменяет PSR-2, в настоящее время статус проекта):
if (
$expr1
&& $expr2
) {
// if body
}
ИЛИ ЖЕ
if (
$expr1 &&
$expr2
) {
// if body
}