Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/02/2011, 11h09   #1
Invité de passage
 
daniel thirion
Inscription : février 2011
Messages : 21
Détails du profil
Informations personnelles :
Nom : daniel thirion

Informations forums :
Inscription : février 2011
Messages : 21
Points : 4
Points : 4
Par défaut affichage d'un csv en tableau

Bonjour à tous de la part d'un débutant en PHP.

Je cherche, à l'aide de fgetcsv, à afficher dans un tableau seulement les 10 premières lignes et les 2 premières colonnes d'un csv qui en contient respectivement 167 et 12.
Ou comment modifier le script suivant qui affiche l'ensemble du fichier ?
Merci d'avance.

Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php  
echo "<table>"; 
$fichier = "monfichier.csv"; 
$fic = fopen($fichier, 'rb'); 
for ($ligne = fgetcsv($fic, 1024, ";"); !feof($fic); $ligne = fgetcsv($fic, 1024, ";")) { 
  echo "<tr>"; 
  $j = sizeof($ligne); 
  for ($i = 0; $i < $j; $i++) { 
    echo "<td>$ligne[$i]</td>"; 
    } 
  echo "</tr>"; 
  } 
echo "</table>\n"; 
?>
hindioriental est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 12h29   #2
Candidat au titre de Membre du Club
 
Inscription : février 2011
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 12
Points : 10
Points : 10
Un truc comme ça doit afficher les 2 premières colonnes des 10 premières lignes :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
<?php 
echo "<table>"; 
$fichier = "monfichier.csv"; 
$fic = fopen($fichier, 'rb'); 
$nb_lignes=0;		//Init du nombre de lignes
$nb_lignes_max=10; 	//On parametre ici le nombre max de lignes a afficher
$nb_colonnes_max=2;	//On parametre ici le nombre max de colonnes a afficher
for ($ligne = fgetcsv($fic, 1024, ";"); !feof($fic); $ligne = fgetcsv($fic, 1024, ";")) { 
	if($nb_lignes<$nb_lignes_max){
		echo "<tr>"; 
		$j = sizeof($ligne); 
		if($j>$nb_colonnes_max){$j=$nb_colonnes_max;} // On limite à 2 colonnes
		for ($i = 0; $i < $j; $i++) { 
			echo "<td>".$ligne[$i]."</td>"; 
		} 
		echo "</tr>"; 
	}
	$nb_lignes++;
 
} 
echo "</table>\n"; 
?>
okiseb est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/02/2011, 01h41   #3
Invité de passage
 
daniel thirion
Inscription : février 2011
Messages : 21
Détails du profil
Informations personnelles :
Nom : daniel thirion

Informations forums :
Inscription : février 2011
Messages : 21
Points : 4
Points : 4
Par défaut selection des lignes d'un csv

Merci beaucoup, Okiseb... C'est super !!!
Et si, par exemple, je souhaite afficher seulement les colonnes 1, 3 et 7, et les lignes 2, 3, 9, 10, 11 et 12 ?
hindioriental est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 08h32   #4
Candidat au titre de Membre du Club
 
Inscription : février 2011
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 12
Points : 10
Points : 10
Alors peut-être cette solution fera l'affaire en gérant tes lignes et tes colonnes à afficher dans des tableaux :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
<?php 
echo "<table>"; 
$fichier = "monfichier.csv"; 
$fic = fopen($fichier, 'rb'); 
$nb_lignes=0;		//Init du nombre de lignes
$tab_lignes=array(2,3,9,10,11,12); //Gestion des lignes dans un tableau
$tab_colonnes=array(1,3,7); //Gestion des colonnes dans un tableau
 
for ($ligne = fgetcsv($fic, 1024, ";"); !feof($fic); $ligne = fgetcsv($fic, 1024, ";")) { 
	if(in_array($nb_lignes,$tab_lignes)){
		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"; 
?>
okiseb est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/02/2011, 09h58   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 465
Points : 8 465
pourquoi faire des for partout ? un while suffis pour le premier, et pour parcourir un tableau c'est foreach
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 10h00   #6
Candidat au titre de Membre du Club
 
Inscription : février 2011
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 12
Points : 10
Points : 10
Effectivement, mais comme je suis parti de son code... je n'ai pas réfléchi sur détail
D'ailleurs, si j'avais du lire un fichier CSV je ne serai même pas passé par cette fonction (fgetcsv)
okiseb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 10h13   #7
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 465
Points : 8 465
on peut simplifier comme ça :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
$fichier = 'monfichier.csv'; 
$fic     = fopen($fichier, 'r'); 
 
$tab_lignes   = array(2, 3, 9, 10, 11, 12);
$tab_colonnes = array_flip(array(1, 3, 7));
 
$nb_lignes = 0;
 
echo '<table>';
 
while($ligne = fgetcsv($fic, 0, ';'))
{ 
    if(in_array($nb_lignes, $tab_lignes))
    {
        echo '<tr><td>';
        echo implode('</td><td>', array_intersect_key($ligne, $tab_colonnes));
        echo '</td></tr>';
    }
 
    ++$nb_lignes;
}
 
echo '</table>';
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 10h45   #8
Candidat au titre de Membre du Club
 
Inscription : février 2011
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 12
Points : 10
Points : 10
merci
okiseb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 22h20   #9
Invité de passage
 
daniel thirion
Inscription : février 2011
Messages : 21
Détails du profil
Informations personnelles :
Nom : daniel thirion

Informations forums :
Inscription : février 2011
Messages : 21
Points : 4
Points : 4
Quelle réactivité !!!
Merci à vous deux.
hindioriental est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h30.


 
 
 
 
Partenaires

Hébergement Web