Comparer deux array

iTonton Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
CptRomaiin Messages postés 315 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à vous chers membres de la communauté CMM,
cela fait plusieurs jours que je cherche un moyen d'arriver à comparer deux arrays de longueurs différentes telles

Array1[1;2;3;4;5;6;7;8;9] et Array2[1;4;7;8;9]

de telle sorte à obtenir une troisième array telle que Array3[2;3;5;6],

j'ai tenté deux foreach() imbriqués avec un if() mais ca ne marche pas, j'ai pleins de résultats moisis et inutiles en retour o.O

j'ai essayé un Array_combine() avec foreach() mais les tableaux n'étant pas de même longueur (et ne le seront pas dans la majorité des cas),

j'ai voulu essayé de mettre directement Array1[] et Array2[] dans Array3[] puis en faisant un Array_unique() mais il me reste toujours une seule valeur sur les deux qui étaient en double

Je ne sais plus quoi faire help me please <3 <3

Aidez moi je vais mourir de l'intérieur tellement ce problème me semble hardcore alors qu'il doit être simple :'(

3 réponses

Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention   527
 
Salut,

Encore plus simple avec la fonction array_diff https://www.php.net/manual/fr/function.array-diff.php :
$a = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
$b = array(1, 4, 7, 8, 9);

$c = array_diff($a, $b);

var_dump($c); // array(2, 3, 5, 6)


Bonne journée
1
Utilisateur anonyme
 
Bsr,

une petite piste et donc forcement un petit peu de lecture : )

https://www.php.net/manual/fr/function.in-array.php

Cdt
0
iTonton Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
Merci beaucoup je vais voir ce que je peux faire comme script avec, ça mais déjà ça m'a l'air prometteur ! :)
0
CptRomaiin Messages postés 315 Date d'inscription   Statut Membre Dernière intervention   58
 
Salut,

Tu peux tout simplement imbriquer deux foreach :

$Array1 = array(1,2,3,4,5,6,7,8,9);
$Array2 = array(1,4,7,8,9);
$Array3 = array();

// Comparaison des valeurs
foreach ($Array1 as $val1) {
 $present = false;
 foreach ($Array2 as $val2) {
  if ($val1 == $val2) { $present = true; }
 }
 if (!$present) {
  array_push($Array3, $val1);
 }
}

// Affichage des valeurs
foreach ($Array3 as $val3) {
 echo $val3 . "\n";
}


Dans cette exemple, le résultat sera le suivant :

2
3
5
6

Par contre cela ne fonctionnera que dans un sens. Ce script vérifie que certaines données présentes dans le tableau 1 sont absentes du tableau 2 mais pas l'inverse. Si c'est ce que tu veux il faudra modifier le code.
0
iTonton Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
Merci CptRomaiin, ton code fonctionne à la perfection, et en plus il ressemble à ce que j'avais fait et qui ne marchait pas du coup, tu m'as donné un code et j'ai compris mes erreurs ! :)
0
CptRomaiin Messages postés 315 Date d'inscription   Statut Membre Dernière intervention   58
 
De rien ;)
0