Elimination des doublons en PHP

Résolu
amin adam -  
 lio -
bonjour,
je debut en php , et je veux chercher dans un fichier .txt les mots qui se répete pour les eliminer et ne laisser qu'un seul.

est ce qu'il ya quelqu'un qui peut m'aider ou une idée?

merci d'avance.
Configuration: Linux
Firefox 1.5.0.12

7 réponses

  1. Jean-François Pillou Messages postés 18961 Date d'inscription   Statut Webmaster Dernière intervention   63 308
     
    Si la variable a toujours la même valeur (si longueur vaut toujours 2.3 dans le même fichier), alors tu peux faire ceci :

    $tableau = file('fichier.txt');
    $tableau = array_unique($tableau);
    file_put_contents('fichier.txt',$tableau);


    Avec ça ton fichier ne contiendra que des lignes uniques !
    1
    1. amin adam
       
      oui ca marche merci bcp pour l'aide :)
      il me reste les lignes, ou la valeur de longeur est differente.
      0
    2. amin adam
       
      voila j'ai trouver comment modifier le fichier .txt mais j'ai les variables sous cette forme :

      #######variable########
      <longeur=6.3>: [l]longeur1
      <profondeur=5.6>: [p]profendeur
      <longeur=2.3>: [aa]longeur2
      <surface=80>: [m]surface
      ... etc
      #####################

      donc je peux affichier que ca :

      longeur=6.3:[l]longeur1
      profondeur=5.6: [p]profendeur
      surface=80:[m]surface

      avec cette expression :
      preg_match_all("/(<([_a-zA-Z0-9]+)=(.*[^>])>:)(\s <longeur=2.3>: [aa]longeur2 \s)(.*)/", $val, $mat,PREG_SET_ORDER);

      mais ca marche ! help
      0
  2. Jean-François Pillou Messages postés 18961 Date d'inscription   Statut Webmaster Dernière intervention   63 308
     
    Je dirais que tu devrais utiliser la fonction file() pour récupérer chaque ligne de ton fichier dans un tableau, puis array_unique() pour dédoublonner, puis file_put_contents pour enregistrer à nouveau le tableau dans le fichier txt !
    0
    1. amin adam
       
      merci ,
      mais ca marche pas , c'est sur une mauvaise manipulation de ma part.
      voila ce que j'ai fait:

      $tableau = file('fichier.txt');
      while(list($cle,$val) = each($tableau)) {
      preg_match_all("/(<([_a-zA-Z0-9]+)=(.*[^>])>)(.*)/", $val, $mat,PREG_SET_ORDER);//pour que je trouve des mot
      entre < et = et >
      foreach ($mat as $vall) {
      $result = array_unique ($mat);
      file_put_contents("fichier.txt","$val");

      echo $vall[2] ;
      }
      }

      mon but c'est de trouver des mots dupliquer entre < et = puis les eliminer en laissant qu'un seul par ex :le premier.
      0
      1. lio > amin adam
         
        yep si je comprend bien tu dois effacer tout ce qu'il y a après chaque ":" par ligne donc je mettrais le contenu ligne par ligne ds un tableau et tu fais un explode de ta chaine style ligne1 = explode(":",$tab[1],-1)

        et le tour est joué :) c'est peut etre pas le plus orthodoxe mais ca devrait marcher ;)
        0
  3. Jean-François Pillou Messages postés 18961 Date d'inscription   Statut Webmaster Dernière intervention   63 308
     
    J'ai simplifié ton expression régulière, par contre je ne comprends pas ce que tu veux faire ...
    preg_match_all("/(<([_a-zA-Z0-9]+)=([^>]+)>)(.*)/", $val, $mat,PREG_SET_ORDER);


    Peux-tu poster un extrait de quelques lignes de ton fichier texte et indiquer comment tu veux le dédoublonner ?
    0
  4. amin adam
     
    merci pour la simplification.
    voila ce que je veux:

    j'ai un fichier .txt dedant il ya des variables comme ceci
    #######variable########
    <longeur=2.3>:longeur
    <profondeur=5.6>:profendeur
    <longeur=2.3>:longeur
    <surface=80>:surface
    ... etc
    #####################

    ce fichier il est générer automatiquement donc je ne peux pas savoir les variables avant.

    ce que j'ai fait c'est de afficher c'est variable dans une page php voila le resultat:

    longeur = 2.3 :longeur
    profondeur = 5.6 :profendeur
    longeur = 2.3 :longeur
    surface = 80 :surface

    jusqu'a ici tt marche bien.

    le problem c'est la redondance des variables comme longeur par exemple

    donc ce que voulais faire c'est avant l'extraction des variables je modifier mon fichier .txt te telle sort qu'il y aura pas des doublons.

    voila le code de ce que j'ai fait pour extraire les données :

    $tableau = file('/var/www/instr1.txt');

    echo ("<CENTER>
    <TABLE BORDER=0>
    <UL TYPE=DISC>");
    $i=1;
    while(list($cle,$val) = each($tableau)) {
    preg_match_all("/(<([_a-zA-Z0-9]+)=(.*[^>])>)(.*)/", $val, $mat,PREG_SET_ORDER);
    foreach ($mat as $vall) {
    echo ("<TD><LI><label><strong>". $vall[2] ."</label></TD><TD><input type='text' name='champ$i' size='11' maxlength='39' value=". $vall[3] ." /></TD><TD> <font color='#0000FF'> ". $vall[4] ."</font></TD>\r\n") ;
    echo ("</TR>");
    $i=$i+1;
    }
    }
    echo ("</TABLE></CENTER> ");
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Jean-François Pillou Messages postés 18961 Date d'inscription   Statut Webmaster Dernière intervention   63 308
     
    Il faut "échapper" les crochets :

    preg_match_all("/(<([_a-zA-Z0-9]+)=([^>]+)>:)(\s*<longeur=[0-9\.]+>: \[aa\]longeur2)(.*)/", $val, $mat,PREG_SET_ORDER); 
    0
    1. amin adam
       
      ca marche pas ca m'affiche rien .
      parcontre j'ai enlever ca :

      <longeur=[0-9\.]+>:

      alors il m'affiche la ligne que je veux pas

      longeur=2.3: [aa]longeur2

      je fait quoi pour l'inverse.

      Merci d'avance
      0
  7. dixup
     
    bonjour moi je voudrais eliminer les doublon dans une liste d'url stoké dans un fichier txt ? comment faire svp .
    0