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?

peter
la source
@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);
jasonbar
la source
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.

Orrd
la source
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
javigzz
la source
3

Je pense que vous recherchez la fonction d'intersection

array array_intersect ( array $array1 , array $array2 [, array $ ... ] )

array_intersect()renvoie un tableau contenant toutes les valeurs de tableau1 présentes dans tous les arguments. Notez que les clés sont conservées.

http://www.php.net/manual/en/function.array-intersect.php

James Kyburz
la source
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); 
}
K-Alex
la source