Comparer 2 tableaux

Résolu
Signaler
Messages postés
27
Date d'inscription
mardi 17 janvier 2006
Statut
Membre
Dernière intervention
27 février 2006
-
Messages postés
27
Date d'inscription
mardi 17 janvier 2006
Statut
Membre
Dernière intervention
27 février 2006
-
voila en fait j ai 2 tableaux $tab1[] et $ tab2[]
a partir de requetes vers une base mysql j insere les donnees dans chacun des tableaux
tableau 1:
$i=0;
while($champ1=mysql_fetch_row($resultat1)){
$tab1[$i]=$champ1;
$i++;
}
tableau 2 :
$j=0;
while($champ2=mysql_fetch_row($resultat2)){
$tab2[$j]=$champ2;
$j++;
}
Jusque la tout va bien, un echo peut me le confirmer en affichant toutes les donnees des 2 tableaux
Ce que je voudrais c est afficher le tableau 1, et seulement les donnees du tableau 2 qui ne se trouvent pas dans le tableau 1
si quelqu un a la solution
merci

19 réponses

Messages postés
27
Date d'inscription
mardi 17 janvier 2006
Statut
Membre
Dernière intervention
27 février 2006

Ayé reussi, avec 1 seul tableau et quelques boucles le tour est joué
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Salut,

tu peux déjà enlever les trucs inutiles :

while($champ1=mysql_fetch_row($resultat1)){
$tab1[]=$champ1;
}
tableau 2 :
while($champ2=mysql_fetch_row($resultat2)){
$tab2[]=$champ2;
}
ça fonctionnera aussi ;-)

Sinon pour comparer : http://fr.php.net/manual/fr/function.array-diff.php

a +

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
1216
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
5
$nbtab1=mysql_num_rows($resultat1);
...
$j=0;
while($champ2=mysql_fetch_row($resultat2))
{
$trouve=0;
for($k=0;$k<$nbtab1;$k++)
{
if($champ2==$tab1[$k]) $trouve=1;
}
if($trouve==0)
{
$tab2[$j]=$champ2;
}
$j++;
}
bon il faut tester !
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Malalam a été plus rapide ^^

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
1216
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
5
ERREUR/auteurdetail.aspx?ID=649802 $nbtab1=mysql_num_rows($resultat1);
...
$j=0;
while($champ2=mysql_fetch_row($resultat2))
{
$trouve=0;
for($k=0;$k<$nbtab1;$k++)
{
if($champ2==$tab1[$k]) $trouve=1;
}
if($trouve==0)
{
$tab2[$j]=$champ2;
$j++;
}
}
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Laisse tomber de toute façon ^^

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
4
"while($champ1=mysql_fetch_row($resultat1)){
$tab1[]=$champ1;
}
tableau 2 :
while($champ2=mysql_fetch_row($resultat2)){
$tab2[]=$champ2;
}"

Y'a peut être moyen de détourner ca via mysql en premier non !
Les requètes SQL ne sont pas que la pour faire du SELECT * ou du SELECT COUNT() !

Je suis sur que y'a moyen d'éviter que tu te fasses chier à faire du traitement PHP.
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Effectivement, dans ce cas il nous faudrait la structure des tables et aussi ce qu'il sélectionne avec ses requêtes :-)

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Là je suis d'accord, je suis aussi certain que cette différence est faisable en sql.
Messages postés
27
Date d'inscription
mardi 17 janvier 2006
Statut
Membre
Dernière intervention
27 février 2006

Peut etre avec un 3°tableau
pour chaque ligne de tableau 1 on regarde si la valeur existe dans tableau 3, si elle n existe pas on l insere
puis de meme avec tableau 2
Messages postés
27
Date d'inscription
mardi 17 janvier 2006
Statut
Membre
Dernière intervention
27 février 2006

nan en fait c est con ce que je dit et d ailleurs ca suffirait avec deux tableaux
c est le coup de barre d apres manger ca
Messages postés
135
Date d'inscription
vendredi 30 décembre 2005
Statut
Membre
Dernière intervention
18 avril 2006

salut,
et si tu nous montrais comment t'as fait ?
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
1 tableau et des boucles? Aie...
Messages postés
27
Date d'inscription
mardi 17 janvier 2006
Statut
Membre
Dernière intervention
27 février 2006

while(list($champ2)=mysql_fetch_row($resultat2))
{
$x=1;
for ($i = 0; $i < mysql_num_rows($resultat1); $i++){
if($tab1[$i]==$champ2)
{
$x=0;
}
}
if ($x!=0){
$nbcolumn++;
$tab1[$i+$nbcolumn]=$champ2;
}
}

$nboccurence = mysql_num_rows($resultat1)+$nbcolumn;
for ($i = 0; $i <= $nboccurence; $i++){
if ($tab1[$i]!=''){
echo $tab1[$i]."
";
}
}
}

bon je sais ca pue la bidouille, mais bon ca marche
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Quelle horreur

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
4
C'est pire que ce que je pensais !!

STOP LA BIDOUILLE !!!! REGARDE TON CODE SQL POUR FAIRE CE QUE TU VEUX FAIRE !!

Rahhhhh !!!!
Messages postés
26
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
21 mars 2006

prenons 2 table SQL avec un champ nom



la table t1 contient a/b/c/d


la table t2 contient e/f/a


select * from t1 => affiche tout le contenu de t1

select * from t2 => affiche tout le contenu de t2



select nom from t2 where t2.nom not in (select nom from t1) => affiche uniquement les entrees de t2 qui ne sont pas dans t1

Donc ca retourne e/f seulement



select nom from t2 where t2.nom not in (select nom from t1) => affiche uniquement les entrees de t1 qui ne sont pas dans t2


Donc ca retourne b/c/d seulement



Autant faire le boulot pas SQL, y a peut etre encore plus rapide avec un left outer join




Cyril
Messages postés
27
Date d'inscription
mardi 17 janvier 2006
Statut
Membre
Dernière intervention
27 février 2006

le probleme c est que je choisi 2 champs de chacune des 2 tables dans ma requete, ca concerne les noms de domaines en fait
champ 1 = nom >>>exemple "google"
champ 2 = extension >>>>exemple ".com"
puis je les colle dans chaque ligne de tableau
$tab1[$i]=$nom . $extension;
j avais deja essaye par mysql avec des requetes imbriqué