web-dev-qa-db-fra.com

valeurs multiples in_array

Comment puis-je vérifier plusieurs valeurs, telles que:

$arg = array('foo','bar');

if(in_array('foo','bar',$arg))

C'est un exemple pour que vous compreniez un peu mieux, je sais que cela ne fonctionnera pas.

84
daryl

Intersectez les cibles avec la botte de foin et assurez-vous que l'intersection est exactement égale à la cible:

$haystack = array(...);

$target = array('foo', 'bar');

if(count(array_intersect($haystack, $target)) == count($target)){
    // all of $target is in $haystack
}

Notez que vous devez uniquement vérifier que la taille de l'intersection obtenue est identique à celle du tableau de valeurs cible pour indiquer que $haystack est un sur-ensemble de $target.

Pour vérifier qu'au moins une valeur dans $target est également dans $haystack, vous pouvez effectuer cette vérification:

 if(count(array_intersect($haystack, $target)) > 0){
     // at least one of $target is in $haystack
 }
175
Mark Elliot

En tant que développeur, vous devriez probablement commencer à apprendre les opérations sur les ensembles (différence, union, intersection). Vous pouvez imaginer votre tableau comme un "ensemble" et les clés que vous recherchez pour l'autre.

Vérifiez si TOUTES les aiguilles existent

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

Vérifiez si AUCUNE des aiguilles existe

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
139
Rok Kralj
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
}
11
RiaD

En quittant @Rok Kralj answer (meilleure OMI) pour vérifier si des aiguilles existent dans la botte de foin, vous pouvez utiliser (bool) au lieu de !!, ce qui peut parfois être source de confusion lors de la révision du code.

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

https://glot.io/snippets/f7dhw4kmju

4
sMyles

IMHO Mark Elliot est la meilleure solution pour ce problème. Si vous avez besoin d'effectuer des opérations de comparaison plus complexes entre les éléments d'un tableau ET que vous êtes sur PHP 5.3, vous pouvez également penser à quelque chose comme:

<?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);

Cela repose sur une fermeture; fonction de comparaison peut devenir beaucoup plus puissant . Bonne chance!

3
maraspin
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 () retourne un tableau contenant toutes les valeurs de array1 présentes dans tous les arguments. Notez que les clés sont préservées.

Retourne un tableau contenant toutes les valeurs de tableau1 dont les valeurs existent dans tous les paramètres.


empty () - Déterminer si une variable est vide

Renvoie FALSE si var existe et a une valeur non vide et non nulle. Sinon, renvoie VRAI.

0
Umesh Patil

Selon le PSR-12 (remplace le PSR-2; statut actuel):

if (
    $expr1
    && $expr2
) {
    // if body
}

OR

if (
    $expr1 &&
    $expr2
) {
    // if body
}

https://www.php-fig.org/psr/

PSR-12

0
DRB