Page 1 sur 1

PHP ET CSV

Posté : 15 sept. 2011, 12:29
par scrab88
Bonjour à tous

J'utilise souvent les fonctions csv de php pour afficher des tableaux en html.
Existe-t-il une fonction php pour combiner plusieurs csv de structure identique et les afficher dans un seul tableau trié ?

Merci pour vos réponses.

Re: PHP ET CSV

Posté : 15 sept. 2011, 14:03
par moogli
salut,

an natif non.

Après avec des structures identiques on peu imaginer un code simple.

la fonction file te permet d'avoir un tableau avec une ligne du fichier par "case" du tableau.
s'il y a une ligne "d’entête" il faut la virer sauf pour le premier fichier. et tu utilise array_merge pour n'avoir qu'un seul tableau avec le contenu de tout les fichiers que tu peux afficher a la fin.

exemple
<?php
$tableaufichier = array ('fichier1.csv','fichier2.csv'); // c'est pour l'exemple ça peut tres bien être le retour d'un formulaire d'upload par exemple
$tableaucsv = array();
foreach ($tableaufichier as $fichiercsv) {
	// on met le contenu du fichier dans une variable temporaire
	$tmp = file($fichiercsv);
	// on vérifie si le tableaucsv est vide car s'il ne l'est pas on vire la 1ere ligne (en considérant qu'il y a TOUJOURS une ligne d'entête,
	// sinon ben faut virer le test XD
	if (!empty($tableaucsv)) {
		unset ($tmp[0]);
	}
	$tableaucsv = array_merge($tableaucsv,$tmp)
}

// affichage final
foreach ($tableaucsv as $csv) {
	// ton traitement habituel
}
?>
bon a près on peu imagine plein de truc, par exemple utiliser un tableau de tableau pour mettre le nom du fichier pour séparer les donnée histoire d'en connaitre la source
genre $tableaucsv[] = array('nomfichier'=>$fichiercsv, 'data' => $tmp);

dans ce cas l'affichage aura un double foreach
<?php
foreach ($tableaucsv as $file) {
	echo 'fichier : '.$file['nomfichier'].'<br />';
	foreach ($file['data'] as $csv) {
		//traitement habituel
	}
}
?>
tu peux aussi construire une classe autour de cela pour "masquer" la "tonne" de code ;)


@+

Re: PHP ET CSV

Posté : 16 sept. 2011, 09:51
par scrab88
Merci Moogli
Je suis novice en PHP et je ne parviens pas à combiner tes lignes de code avec mon script d'affichage.
Ci-dessous, le script que j'utilise :
<?php 	 
$fichier = 'CLTP1.csv';	   
if(file_exists($fichier)) {
echo "<table>";  
echo "<colgroup></colgroup><colgroup align=left></colgroup><colgroup align=left></colgroup>";
$fic = fopen($fichier, 'rb'); 
$nb_lignes=0;		//Init du nombre de lignes
$nb_lignes_max=250; //Gestion des lignes dans un tableau
$tab_colonnes=array(0,2,3,4,5,6,8); //Gestion des colonnes dans un tableau
 
for ($ligne = fgetcsv($fic, 1024, ","); !feof($fic); $ligne = fgetcsv($fic, 1024, ",")) { 
	if($nb_lignes<$nb_lignes_max){
		echo "<tr>"; 
		$j = sizeof($ligne); 
		for ($i = 0; $i < $j; $i++) { 
			if(in_array($i,$tab_colonnes)){
				echo "<td>".$ligne[$i]."</td>"; 
			}
		} 
		echo "</tr>"; 
	}
	$nb_lignes++;
	
} 
echo "</table>\n";
} 	
else {
echo "Pas encore de résultat saisi... !";
}
?>

Re: PHP ET CSV

Posté : 16 sept. 2011, 10:24
par sirakawa
je mettrais un controle :
for ($ligne = fgetcsv($fic, 1024, ","); !feof($fic); $ligne = fgetcsv($fic, 1024, ",")) {
print_r($ligne);
...

Re: PHP ET CSV

Posté : 16 sept. 2011, 10:34
par stealth35
un while suffit
while ($ligne = fgetcsv($fic))

Re: PHP ET CSV

Posté : 16 sept. 2011, 11:28
par moogli
Merci Moogli
Je suis novice en PHP et je ne parviens pas à combiner tes lignes de code avec mon script d'affichage.
Ci-dessous, le script que j'utilise :
je t'ai donnée quasiement tout, il te manque juste la fonction str_getcsv qui va faire la même chose que fgetcsv mais sur une chaine de caractère.

le code mis plus haut va te créer un tableau avec une ligne du fichier par 'case' du tableau et cela pour chaque tableau. Il te suffit donc de mettre ceci
<?php
echo "<tr>";
                $j = sizeof($ligne);
                for ($i = 0; $i < $j; $i++) {
                        if(in_array($i,$tab_colonnes)){
                                echo "<td>".$ligne[$i]."</td>";
                        }
                }
                echo "</tr>"; 
?>
dans la boucle foreach qui parcourt le tableau.

qu'est ce que tu n'a pas compris dans le code fournit ?

@+

Re: PHP ET CSV

Posté : 17 sept. 2011, 00:05
par scrab88
Décidément trop compliqué pour moi, tout ça....
Merci quand même.