Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1708 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Algo : trouver les éléments pas commun à deux tableaux

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP] Algo : trouver les éléments pas commun à deux tableaux

n°548178
kayasax
Posté le 23-10-2003 à 10:57:12  profilanswer
 

Salut !
j'ai deux tableaux et j'aimerai isoler les éléments qui ne sont pas commun à ces 2 tableaux (élément présent dans l'un mais pas dans l'autre).
D'après vous c'est quoi le meilleur algo pour faire ca ?
Merci

mood
Publicité
Posté le 23-10-2003 à 10:57:12  profilanswer
 

n°548183
kayasax
Posté le 23-10-2003 à 11:02:43  profilanswer
 

arf array_diff()

n°549486
kayasax
Posté le 24-10-2003 à 12:34:47  profilanswer
 

euh ! en fait je ne comprends pas trop le fonctionnement de array_diff() (voir ci dessous) donc si qqun avait un algo pour repérer les éléments qui ne sont pas aux 2 tableaux , ca m'interesse.
 
Voici ce que j'obtiens avec array_diff() : anomalie correspond à array_diff($fichier,$dossier) ET array_diff($dossier,$fichier)
: les sauts de lignes à la fin sont des éléments du tableau anomalie !  :heink:  
 


Fichiers :
BLUGEO-MDIJO
CLAUDO-MDIJO
CTRL-MDIJO
DIAS-MDIJO
MICHON-MDIJO
ROBINE-MDIJO
VBOUNIA
VCHARTI
VMICHON
 
Dossiers :
.
..
BLUGEO-MDIJO
CLAUDO-MDIJO
DIAS-MDIJO
MICHON-MDIJO
ROBINE-MDIJO
VBLUGEO
VBOUNIA
VCHARTI
VDIAS
VMICHON
VPAGESP
VROBINE
 
Anomalies :  
.
..
 
 
 
 
 
 
 

n°549512
Mara's dad
Yes I can !
Posté le 24-10-2003 à 13:05:32  profilanswer
 

Montre le bout de code qui fait çà.
Tu dois te prendre les pieds dans le tapis sur le 'ET'...


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°549532
kayasax
Posté le 24-10-2003 à 13:28:42  profilanswer
 

Mara's dad a écrit :

Montre le bout de code qui fait çà.
Tu dois te prendre les pieds dans le tapis sur le 'ET'...


je ne pense pas mais bon :
 
 


$cmd="net use g: \\\\ctrl-mdijo\\ssa$";
exec($cmd);
 
$handle=opendir('g:\\donnees\\');
echo "Pointeur de dossier : $handle\n";
echo "Fichiers :\n";
while ($file = readdir($handle))
 {
if($file !='.' ||$file !='..'|| !(eregi('CTRL',$file)))
 {
 if(ereg('.ssa',$file))
  {
  $file=ereg_replace('.ssa','',$file);
  $fichier[]=$file;
  }
 else $dir[]=$file;  
 
 }
  }
  closedir($handle);
   
$cmd="net use g: /d /y";
exec($cmd);
 
echo "Fichiers :<br>";
for($i=0;$i<=sizeof($fichier);$i++)
{
echo "$fichier[$i]<br>";
}
 
echo "Dossierss :<br>";
for($i=0;$i<=sizeof($dir);$i++)
{
echo "$dir[$i]<br>";
}
 
 
$anomalie=array_diff($fichier,$dir);
$anomalie=array_diff($dir,$fichier);
Echo " Anomalies : <br>";
for($i=0;$i<=sizeof($anomalie);$i++)
{
if(ereg('CTRL',$anomalie[$i]))
{
}
else
{
echo "$anomalie[$i]<br>";
}}
?>


 
ps je suis en php 4.0.6 ... vais ptet faire une mise à jour qd meme  :whistle:  
 
 :hello:


Message édité par kayasax le 24-10-2003 à 13:50:36
n°549698
kayasax
Posté le 24-10-2003 à 14:57:07  profilanswer
 

arf ! j'ai trouvé c'est mon affichage du tableau qui déconne, lorsque j'utilise print_r($anomalie) ca fonctionne... -> c'est du au fait que les index ne sont pas contigus ! et que sizeof() ne retourne pas l'index max :
 

Citation :

This is taken from sganer@expio.co.nz comments on the sizeof() function:  
If some elements in your array are not set, then sizeof() and count() will not return the index of the last element, but will return the number of set elements. To find the index of the last element in the array:  
end($yourArray);  
$index = key($yourArray);

from php.net fonction count()


Message édité par kayasax le 24-10-2003 à 15:07:48
n°549727
Mara's dad
Yes I can !
Posté le 24-10-2003 à 15:15:15  profilanswer
 

Ok, alors voilà :
 
Plusieurs problèmes
 
1- Pas grave, mais :/
On ne fait pas :

Code :
  1. if( condition )
  2. {
  3. }
  4. else
  5. {
  6.        instruction
  7. }


 
mais :

Code :
  1. if( ! condition )
  2. {
  3.        instruction
  4. }


 
2- Tu utilise le même tableau $anomalie, or la deuxième fois, il est écrasé.
 
3-  

Citation :

array_diff() retourne un tableau qui contient toutes les valeurs du tableau array1 qui sont absentes de tous les autres arguments. Notez que les clés sont préservées.


 
Ca veut dire que dans ta boucle de parcours de $anomalie, tu ne peut pas utiliser un indice $i incrémenté. Les indices sont ceux du premier tableau argument de array_diff.
 
 
Regarde ce que fait çà :

Code :
  1. <?php
  2. $fichier[0] = 'BLUGEO-MDIJO';
  3. $fichier[1] = 'CLAUDO-MDIJO';
  4. $fichier[2] = 'CTRL-MDIJO';
  5. $fichier[3] = 'DIAS-MDIJO';
  6. $fichier[4] = 'MICHON-MDIJO';
  7. $fichier[5] = 'ROBINE-MDIJO';
  8. $fichier[6] = 'VBOUNIA';
  9. $fichier[7] = 'VCHARTI';
  10. $fichier[8] = 'VMICHON';
  11. $dir[0] = '.';
  12. $dir[1] = '..';
  13. $dir[2] = 'BLUGEO-MDIJO';
  14. $dir[3] = 'CLAUDO-MDIJO';
  15. $dir[4] = 'DIAS-MDIJO';
  16. $dir[5] = 'MICHON-MDIJO';
  17. $dir[6] = 'ROBINE-MDIJO';
  18. $dir[7] = 'VBLUGEO';
  19. $dir[8] = 'VBOUNIA';
  20. $dir[9] = 'VCHARTI';
  21. $dir[10] = 'VDIAS';
  22. $dir[11] = 'VMICHON';
  23. $dir[12] = 'VPAGESP';
  24. $dir[13] = 'VROBINE';
  25. $anomalie_fic=array_diff($fichier,$dir);
  26. //$anomalie=array_diff($dir,$fichier);
  27. echo " Anomalies fic : <br><pre>";
  28. print_r( $anomalie_fic );
  29. echo "</pre>";
  30. foreach( $anomalie_fic as $ano)
  31. {
  32. if( ! ereg( 'CTRL', $ano ) )
  33. {
  34.  echo "$ano<br>";
  35. }
  36. }
  37. $anomalie_dir=array_diff($dir,$fichier);
  38. echo "<hr> Anomalies dir : <br><pre>";
  39. print_r( $anomalie_dir );
  40. echo "</pre>";
  41. foreach( $anomalie_dir as $ano)
  42. {
  43. if( ! ereg( 'CTRL', $ano ) )
  44. {
  45.  echo "$ano<br>";
  46. }
  47. }
  48. ?>


 
Le deuxième tableau contient 6 éléments ( dans ta version comme dans la mienne vu que dans la tienne, il est écrasé ) dont les indices sont 0, 1, 7, 10, 12 et 13.
Donc si $i va de 0 à 5 çà donne bien :
$anomalie[0] -> .
$anomalie[1] -> ..
$anomalie[2] ->  
$anomalie[3] ->  
$anomalie[4] ->  
$anomalie[5] ->  
 
Conclusion, utiliser print_r() pour voir la structure réelle d'un tableau quand on ne comprends pas ce qui se passe.
Bien mettre entre <pre> et </pre> car print_r génère des retour chariot et non pas des <br>.
 
 


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°549728
Mara's dad
Yes I can !
Posté le 24-10-2003 à 15:15:41  profilanswer
 

Bon, ben grilled quoi !
 
end() et key(), c'est joli, mais je préfère foreach(), surtout si les indices ne sont pas numériques.


Message édité par Mara's dad le 24-10-2003 à 15:17:14

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°549763
kayasax
Posté le 24-10-2003 à 15:36:19  profilanswer
 

lol ! clair t'es grillé la !  
merci de t'etre penche la dessus tu as du vraiment bossé pour ca !!
sinon pour tes remarques :
1 - mouais ok
2 - OK
3 - c'est ce que j'avais dis .
 
MERCI MERCI pour le foreach($tab as $val) {} , ca déchire !!
 
Merci , a+


Message édité par kayasax le 24-10-2003 à 15:54:01

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Algo : trouver les éléments pas commun à deux tableaux

 

Sujets relatifs
[urgent] probleme avec VBA sous excel 98: Trouver la derniere ligne[HS mais Urgent :x] Site Web pré-fait et configurable comme Php-nuke
Portail PHP chez free.fr ...tableaux avec réorganisation par colonnes suivant divers paramétres !
[PHP] créer un fichier doc, xls.....[PHP] entiers 64 bits ??
[PHP] Je cherche un tuto sur l'upload,[PHP ou C] Obtenir le débit d'une carte réseau
[PHP] Passer un texte avec un '&' comme paramètreHTML --> PHP ==> Parse error !
Plus de sujets relatifs à : [PHP] Algo : trouver les éléments pas commun à deux tableaux


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR