Elimination des doublons en PHP
Résolu/Fermé
A voir également:
- Elimination des doublons en PHP
- Supprimer les doublons excel - Guide
- Doublons photos - Guide
- Easy php - Télécharger - Divers Web & Internet
- Supprimer les doublons photos gratuit - Télécharger - Nettoyage
- Notepad++ supprimer les doublons - Forum Bureautique
7 réponses
Jean-François Pillou
Messages postés
18301
Date d'inscription
lundi 15 février 1999
Statut
Webmaster
Dernière intervention
16 février 2023
63 274
16 août 2007 à 15:55
16 août 2007 à 15:55
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 :
Avec ça ton fichier ne contiendra que des lignes uniques !
$tableau = file('fichier.txt'); $tableau = array_unique($tableau); file_put_contents('fichier.txt',$tableau);
Avec ça ton fichier ne contiendra que des lignes uniques !
Jean-François Pillou
Messages postés
18301
Date d'inscription
lundi 15 février 1999
Statut
Webmaster
Dernière intervention
16 février 2023
63 274
16 août 2007 à 11:43
16 août 2007 à 11:43
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 !
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.
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.
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 ;)
et le tour est joué :) c'est peut etre pas le plus orthodoxe mais ca devrait marcher ;)
Jean-François Pillou
Messages postés
18301
Date d'inscription
lundi 15 février 1999
Statut
Webmaster
Dernière intervention
16 février 2023
63 274
16 août 2007 à 13:23
16 août 2007 à 13:23
J'ai simplifié ton expression régulière, par contre je ne comprends pas ce que tu veux faire ...
Peux-tu poster un extrait de quelques lignes de ton fichier texte et indiquer comment tu veux le dédoublonner ?
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 ?
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> ");
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> ");
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Jean-François Pillou
Messages postés
18301
Date d'inscription
lundi 15 février 1999
Statut
Webmaster
Dernière intervention
16 février 2023
63 274
16 août 2007 à 17:21
16 août 2007 à 17:21
Il faut "échapper" les crochets :
preg_match_all("/(<([_a-zA-Z0-9]+)=([^>]+)>:)(\s*<longeur=[0-9\.]+>: \[aa\]longeur2)(.*)/", $val, $mat,PREG_SET_ORDER);
16 août 2007 à 16:02
il me reste les lignes, ou la valeur de longeur est differente.
16 août 2007 à 17:17
#######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