web-dev-qa-db-fra.com

Comment utiliser in_array si l'aiguille est un tableau?

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.

43
Donny Kurnia

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
}
75
cletus

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
}
28
Justin Johnson

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.

5
Sam152

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.

0
Ivan Karpan