Page 1 sur 1

Array supprimer doublons

Posté : 20 mai 2017, 07:05
par Jefekoi
Bonjour,

Je fais un peu de php mais pas assez pour comprendre les array.

J'ai mal au crane à force de chercher pourtant je suis patient mais là ...

J'ai un fichier txt avec à l’intérieur ceci :

robots:123
homogeneisates:894
dico:7366
robots:589
.. Plus de 200 lignes comme ça


Je voudrais supprimer les doublons comme dans l'exemple (robots:589 )
Soit supprimer le premier "robots:123" soit le deuxième "robots:589" peu importe.

Naturellement je ne connais pas d'avance les lignes qui vont s'enregistrer

C'est uniquement supprimer la ligne première variable en double( comme ici ex : robots:589)

Merci à vous.

Re: Array supprimer doublons

Posté : 20 mai 2017, 08:30
par Jefekoi
J'ai réussi à faire ça pour qu'il coupe les deux variables

Je ne suis pas un expert désolé .


$data = file_get_contents("infos/".$annee."/".$mois.'/lesmots.txt');
$file = "infos/".$annee."/".$mois.'/lesmots.txt'; // nom de mon fichier
$fp = fopen($file,'rb'); // ouverture du fichier
$tab = array(); // initialisation d'un tableau
while (!feof($fp)){ // tant que la lecture n'arrive pas au bout du fichier
$ligne = fgets($fp, 1024); // stocke le contenu de la ligne dans une variable
$ligne = trim(substr($ligne,0,36));
$taille = strlen($ligne); // calcule la taille de la chaine en nbr de caractère
if ($taille != 0){// si la taille de la chaine est différente de 0
$tab[]= explode(":",$ligne); // stocke le contenu dans un tableau
}} fclose($fp); // ferme le fichier
$nbr_Enregistrement = count($tab); // nombre d'enregistrements dans le tableau
sort($tab); // tri par ordre alphabétique
while (list($key, $value) = each($tab)) {
    echo $value[0]."<br />";
}

Re: Array supprimer doublons

Posté : 20 mai 2017, 12:03
par @rthur
Voici comment je l'aurait fait ci-dessous.
J'ai mis des commentaires mais n'hésites pas à poser des questions si il y a une ligne ou une fonction que tu ne comprends pas
<?php
$data = file_get_contents("infos/".$annee."/".$mois.'/lesmots.txt');

foreach(explode("\n", $data) as $ligne) { // On parcours chaque ligne du fichier
	// On met dans la variable $libelle la partie avant ":" et dans $nombre la 2eme partie
	list($libelle, $nombre)=explode(':', $ligne); 
	// On crée un tablo $tablo_final qui aura comme clé le libelle
	// Comme une clé dans un tableau est unique, chaque valeur en doublon va remplacer la précédente
	$tablo_final[$libelle]=$nombre; 
}

// On affiche le résultat
foreach ($tablo_final as $libelle => $nombre) echo $libelle.':'.$nombre."<br />\n";

Re: Array supprimer doublons

Posté : 20 mai 2017, 19:02
par Jefekoi
Génial, c'est tout ce que je voulais ...

Quand je regarde ton programme je me dis "c'était si simple" (5 lignes) je me suis cassé la tête pour ça :)

On voit bien les connaisseurs :)

Merci beaucoup c'est sympa ..

Je laisse le topic en non réglé (si jamais je voudrais revenir sur un point) ...

Re: Array supprimer doublons

Posté : 21 mai 2017, 06:08
par Jefekoi
Bonjour,

Petite question en passant, si je veux afficher uniquement les dix premières lignes du résultat , faut t-il faire une condition pour sortir de la boucle ou je mémorise la totalité pour faire un "for" après ?

Ce n'est pas que je ne sache pas le faire mais c'est plutôt un conseil d'expert que j'ai besoin .

Merci

Ps: dans le style comme ça :

Code : Tout sélectionner

foreach ($tablo_final as $libelle => $nombre) $compteligne++; if ($compteligne>=10){ break;} echo $libelle.':'.$nombre."<br />\n";

Re: Array supprimer doublons

Posté : 21 mai 2017, 22:48
par @rthur
Il est préférable de mettre ton break au niveau du traitement plutôt qu'au moment de la restitution car ça sera + rapide à générer pour PHP (quelques millisecondes, ça ne se verra pas bcp sur 200 lignes, mais ça se verra avec bcp + de lignes)

Re: Array supprimer doublons

Posté : 22 mai 2017, 06:13
par Jefekoi
Bonjour,

Ok merci patron ;)
Bonne semaine à toi.