[RESOLU] Lire fichier TXT et l'afficher dans un ordre precis

Eléphant du PHP | 133 Messages

25 avr. 2015, 15:42

bonjour à tous ,

j'essai de faire un système qui marche sous base de fichier txt

le fichier txt se présente sous cette forme :

@anom1;;5
@cnom2;;3
@nnom3;;8
@hnom4;;4
@enom5;;1
......................

j'utilise ce code pour le lire et l'afficher :

Code : Tout sélectionner

$handle = fopen('@@BDD.txt', 'r'); $tb_nom = array(); $tb_total = array(); $i = 0; while(($data = fgetcsv($handle, 1000, ';;')) !== FALSE){ $tb_nom[$i] = $data[0]; $tb_total[$i] = $data[2]; $i++; } $i_max = $i; fclose($handle); array_multisort($tb_nom, $tb_total); echo "<table>"; for($i = 0; $i < $i_max; $i++){ echo "<tr>"; echo ' '.$tb_nom[$i].' '.$tb_total[$i].'<br>'; echo "</tr>"; } echo "</table>";
il affiche le fichier brut et par ordre alphabetique :

anom1 == > 5
cnom2 ==> 3
enom3 ==> 1
hnom4 ==> 4
nnom5 ==> 8


je voudrais afficher selon le nombre en ordre décroissant et avoir :

nom3 ==> 8
nom1 ==> 5
nom4 ==> 4
nom2 ==> 3
nom5 ==> 1


comment procédé sachant que ce chiffre change régulièrement

cdt PAscal
Modifié en dernier par sax76 le 25 avr. 2015, 16:34, modifié 1 fois.

Mammouth du PHP | 688 Messages

25 avr. 2015, 16:33

voir : Exemple #3 Classer les résultats d'une base de données dans
http://php.net/manual/fr/function.array-multisort.php
il faut donc avoir un seul tableau dans la boucle fgetcsv et non 2.

Eléphant du PHP | 133 Messages

25 avr. 2015, 16:39

Code : Tout sélectionner

array_multisort($tb_total , SORT_DESC ,$tb_nom);
resolu ca marche merciiiiiiiiiiiiiiiiiiiiii

Eléphant du PHP | 133 Messages

25 avr. 2015, 18:00

un petit detail me chagrine sur l'affichage
la base fait par ex 40 lignes j'affiche donc les 40 lignes
comment bloquer à 20 par ex

Code : Tout sélectionner

echo '<table>'; for($i = 0; $i < $i_max; $i++){ echo '<tr>'; echo ''.$pos.' '.$tb_nom[$i].' '.$tb_total[$i].'<br>'; if ($pos == 20) { echo '</tr>' ; } $pos++ ; } echo '</table>';
j'ai fais ca mais impossible d'affiche que 20 lignes :(

Eléphant du PHP | 133 Messages

25 avr. 2015, 18:17

j'ai fais ceci , ca marche mais est ce propre ?

Code : Tout sélectionner

if ($pos == 20) { echo '</tr>'; die() ; } $pos++ ; } echo '</table>';

Mammouth du PHP | 688 Messages

25 avr. 2015, 18:19

if($i_max > 20)[
$i_max=20;
}
for($i = 0; $i < $i_max; $i++){

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

25 avr. 2015, 20:24

Il suffit simplement de limiter le nombre d'itération de ta boucle for en jouant sur la valeur de $i_max.
Tu peux par exemple définir celui-ci ainsi : $i_max = min($i, 20);

Comme ça ta boucle s'arrête au plus petit des deux entre $i (ton nombre de résultats) et 20. Si tu as 10 résultats, il boucle 10 fois, si tu as plus de 20 résultats il ne bouclera que 20 fois au maximum,

Quant à interrompre une boucle, il faut utiliser l'instruction "break" (et non pas die :)) pour sortir immédiatement de la boucle, ou "continue" si tu veux sauter une itération et passer à la suivante sans sortir de la boucle.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 133 Messages

26 avr. 2015, 20:37

Merci à tout les deux

j'ai mis finalement "break"
et ca roule :)

(par contre je peux plus mettre resolu en haut )