J'ai 2 tableaux, la valeur sera chargée à partir de la base de données, en voici un exemple:
$arr1 = array(1,2,3);
$arr2 = array(1,2,3,4,5,6,7);
Ce que je veux faire est de vérifier si toutes les valeurs dans $arr1
existent dans $arr2
. L'exemple ci-dessus devrait être une TRUE
tandis que:
$arr3 = array(1,2,4,5,6,7);
comparer $arr1
avec $arr3
retournera une FALSE
.
Normalement, j'utilise in_array
car je n'ai besoin que de cocher une seule valeur dans un tableau. Mais dans ce cas, in_array
ne peut pas être utilisé. J'aimerais voir s'il existe un moyen simple d'effectuer la vérification avec un minimum de bouclage.
UPDATE pour clarification.
Le premier tableau sera un ensemble contenant des valeurs uniques. Le second tableau peut contenir des valeurs dupliquées. Ils sont tous deux garantis un tableau avant le traitement.
Utilisez array_diff()
:
$arr1 = array(1,2,3);
$arr2 = array(1,2,3,4,5,6,7);
$arr3 = array_diff($arr1, $arr2);
if (count($arr3) == 0) {
// all of $arr1 is in $arr2
}
Vous pouvez utiliser array_intersect ou array_diff :
$arr1 = array(1,2,3);
$arr2 = array(1,2,3,4,5,6,7);
if ( $arr1 == array_intersect($arr1, $arr2) ) {
// All elements of arr1 are in arr2
}
Cependant, si vous n'avez pas besoin d'utiliser le résultat de l'intersection (ce qui semble être votre cas), l'utilisation de array_diff est plus économe en temps et en temps:
$arr1 = array(1,2,3);
$arr2 = array(1,2,3,4,5,6,7);
$diff = array_diff($arr1, $arr2);
if ( empty($diff) ) {
// All elements of arr1 are in arr2
}
Vous pouvez essayer d’utiliser la fonction array_diff () pour trouver la différence entre les deux tableaux, cela pourrait vous aider. Je pense que pour préciser vous voulez dire, toutes les valeurs du premier tableau doivent être dans le second tableau, mais pas l'inverse.
Dans mon cas particulier, je devais vérifier si une paire d'identifiants avait été traitée auparavant ou non. Si simple array_diff()
n'a pas fonctionné pour moi.
Au lieu de cela, j'ai généré des clés à partir d'identifiants triés par ordre alphabétique et les ai utilisées avec in_array:
<?php
$pairs = array();
// ...
$pair = array($currentId, $id);
sort($pair);
$pair = implode('-', $pair);
if (in_array($pair, $pairs)) {
continue;
}
$pairs[$pair] = $pair;
Ce n'est probablement pas une solution optimale du tout mais j'en avais juste besoin pour qu'un script sale soit exécuté une fois.