php vérifie si le tableau contient toutes les valeurs du tableau d'un autre tableau


110
$all = array
(
    0 => 307,
    1 => 157,
    2 => 234,
    3 => 200,
    4 => 322,
    5 => 324
);
$search_this = array
(
    0 => 200,
    1 => 234
);

Je voudrais savoir si $ all contient toutes les valeurs de $ search_this et renvoie vrai ou faux. une idée s'il vous plaît?



@VishalKumarSahu Pas tout à fait un doublon: Votre lien donné a à voir avec la vérification si TOUS les éléments sont contenus dans un autre tableau, pas si TOUS les éléments sont contenus dans un autre.
Stefan

Réponses:


159

Regardez array_intersect () .

$containsSearch = count(array_intersect($search_this, $all)) == count($search_this);

11
Vous savez que vous pouvez omettre les deux count()appels?
Wrikken

1
@Wrikken Les valeurs ne peuvent-elles pas être réorganisées pendant array_intersect()? Je veux dire, ['a', 'b'] != ['b', 'a'].
sbichenko

4
Et même alors: comparaison de tableaux : " ==TRUE si $ a et $ b ont les mêmes paires clé / valeur." , donc l'ordre n'a même pas d'importance (utiliser ===pour cela)
Wrikken

2
Cette réponse suppose que le tableau $ all contient uniquement des valeurs uniques. Si ce n'est pas le cas, on peut utiliser la fonction array_unique sur le tableau $ all dans la fonction array_intersects.
Relequestual

5
array_diff solution @orrd a donné est beaucoup plus propre
Joseph Connolly

223

Les réponses précédentes font toutes plus de travail que nécessaire. Utilisez simplement array_diff . C'est la manière la plus simple de le faire:

$containsAllValues = !array_diff($search_this, $all);

C'est tout ce que vous avez à faire.


4
Merci pour le moment aha; Je suis venu en pensant array_intersect.
Derek Illchuk le

19
cela devrait être la réponse
Matthieu

2
Oui, c'est une meilleure solution
Oleksandr Diudiun

1
Meilleure solution que l'intersection!
TheBosti

1
Je suis tombé sur cette page et j'ai utilisé la solution ci-dessus car elle représentait des doublons
Rayzor

9

Un peu plus court avec array_diff

$musthave = array('a','b');
$test1 = array('a','b','c');
$test2 = array('a','c');

$containsAllNeeded = 0 == count(array_diff($musthave, $test1));

// this is TRUE

$containsAllNeeded = 0 == count(array_diff($musthave, $test2));

// this is FALSE


0

Que dis-tu de ça:

function array_keys_exist($searchForKeys = array(), $searchableArray) {
    $searchableArrayKeys = array_keys($searchableArray);

    return count(array_intersect($searchForKeys, $searchableArrayKeys)) == count($searchForKeys); 
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.