Page 1 sur 1

tri csv

Posté : 03 nov. 2010, 21:28
par hindi
Bonjour à tous.
Débutant en PHP, j'utilise le script suivant pour afficher "fichier.csv" dans un tableau html.
"fichier.csv" est sous la forme : NOM Prénom;Club;Licence;Age
Comment dois-je modifier le script pour qu'il affiche "fichier.csv" trié par ordre alphabétique par "NOM Prénom" ?


<?php
echo "<table width=65% border=0 align=center cellpadding=3 cellspacing=1 bgcolor=#3366FF>";
echo "<colgroup></colgroup><colgroup align=left></colgroup>";
$row = 0;
$fichier = fopen("fichier.csv", "r");
while (($data = fgetcsv($fichier, 1000, ";")) !== FALSE) {

$num = count($data);
echo "<tr>";
$row++;
for ($c=0; $c < $num; $c++) {
echo "<td>" . $data[$c] . "</td>";
}
echo "</tr>";
}
fclose($fichier);
echo "</table>";
?>
Merci d'avance

Re: tri csv

Posté : 03 nov. 2010, 22:17
par AB
A priori avec ton fichier csv j'essaierais de faire avec les champs récupérées
un tableau à deux dimensions de cette forme ;

Pour chaque ligne :

$tab[$valeur_nom_prenom]['club'] = $valeur_club;
$tab[$valeur_nom_prenom]['licence'] = $valeur_licence;
$tab[$valeur_nom_prenom]['Age'] = $valeur_age;


Ensuite tu fais ksort($tab) qui tri le tableau sur les clé (donc sur $valeur_nom_prenom) et voilà. Reste plus qu'à afficher ton tableau.

Y'a peut-être plus simple mais en attendant cette solution devrait fonctionner :wink:

Re: tri csv

Posté : 03 nov. 2010, 22:52
par AB
Donc ça pourrait donner quelque chose comme ça :
$tab = array();

$fichier = fopen("fichier.csv", "r");
while (($data = fgetcsv($fichier, 1000, ";")) !== FALSE) 

{
	$tab[$data[0]]['club'] = $data[1];
	$tab[$data[0]]['licence'] = $data[2];
	$tab[$data[0]]['age'] = $data[3];
}

fclose($fichier);

ksort($tab);

foreach ($tab as $key => $value) echo $key.' '.$value['club'].' '.$value['licence'].' '.$value['age'].'<br />';
Pas testé mais on devrait pas être loin du compte.

Re: tri csv

Posté : 04 nov. 2010, 11:40
par hindio
merci AB
C'est presque ce que je voulais.
Il me manque juste de savoir ou placer les balises <table> <tr> et <td> pour l'affichage sous forme de tableau.

Re: tri csv

Posté : 04 nov. 2010, 14:35
par stealth35
ce que tu peux faire aussi, c'est importer ton fichier dans un base sqlite en memoire tu pourras faire des requete comme tu le souhaite dessus, la ca va etre uniquement trier par Nom mais pas par prénom apres

Re: tri csv

Posté : 04 nov. 2010, 16:37
par AB
Tu peux créer le code html avec une table comme ceci :
<?php
$tab = array();

$fichier = fopen("fichier.csv", "r");
while (($data = fgetcsv($fichier, 1000, ";")) !== FALSE)

{
        $tab[$data[0]]['club'] = $data[1];
        $tab[$data[0]]['licence'] = $data[2];
        $tab[$data[0]]['age'] = $data[3];
}

fclose($fichier);

ksort($tab);

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Document sans titre</title>
</head>

<body>

<?php if(isset($tab) && is_array($tab) && count($tab) > 0)
{
echo '<table>';

foreach ($tab as $key => $value) 
{
echo '<tr>';
echo '<td>'.$key.'</td><td>'.$value['club'].'</td><td>'.$value['licence'].'</td><td>'.$value['age'].'</td>';
echo '</tr>';
}

echo '</table>';
}
 ?>
</body>
</html>

Re: tri csv

Posté : 04 nov. 2010, 16:41
par stealth35
AB : tu devrais regarder SplFileObject, tu peux manipuler du CSV mais avec les Iterators :wink:

Re: tri csv

Posté : 04 nov. 2010, 16:53
par AB
Je prend note, mais bon quand j'utilise des nouveaux trucs, faut que j'y vois un intérêt assez rapide, or là le code de base est trop simple pour que je puisse trouver ta solution encore plus simple... Peut-être dans d'autres circonstances :)

Cela dit si tu veux donner ta version, ça fera une variante php5 :)

Re: tri csv

Posté : 04 nov. 2010, 16:57
par stealth35
Je prend note, mais bon quand j'utilise des nouveaux trucs, faut que j'y vois un intérêt assez rapide, or là le code de base est trop simple pour que je puisse trouver ta solution encore plus simple... Peut-être dans d'autres circonstances :)

Cela dit si tu veux donner ta version, ça fera une variante php5 :)

ca ferait comme ca
$fichier = new SplFileObject("fichier.csv");
$fichier->setFlags(SplFileObject::READ_CSV);

foreach($fichier as $data)
{
    $tab[$data[0]]['club'] = $data[1];
    $tab[$data[0]]['licence'] = $data[2];
    $tab[$data[0]]['age'] = $data[3];
}
tu gagnes du temps sur le parcours (iterator quoi) :wink:

Re: tri csv

Posté : 04 nov. 2010, 18:05
par AB
A ben voilà, c'est tout de suite plus motivant avec un exemple, merci :wink:

Et comme ça a piqué un peu plus ma curiosité j'y ai regardé un peu mieux :)

D'ailleurs si j'ai bien compris il faudrait utiliser la fonction setCsv pour indiquer le format français comme dans l'exemple original, donc la partie php deviendrait ça :
$fichier = new SplFileObject("fichier.csv");
$fichier->setFlags(SplFileObject::READ_CSV);
$fichier->setCsvControl(';');

$tab = array();

foreach($fichier as $data)
{
    $tab[$data[0]]['club'] = $data[1];
    $tab[$data[0]]['licence'] = $data[2];
    $tab[$data[0]]['age'] = $data[3];
}

ksort($tab);