Pb recuperation de valeur dans tableau php

Résolu/Fermé
Signaler
Messages postés
192
Date d'inscription
dimanche 16 mars 2008
Statut
Membre
Dernière intervention
21 décembre 2014
-
Messages postés
192
Date d'inscription
dimanche 16 mars 2008
Statut
Membre
Dernière intervention
21 décembre 2014
-
Bonjour,
j'ai un soucis en php, pour obtenir une colonne d'un tableau .Le fichier csv que je vais chercher contient 9 colonnes,
voici mon code :
  $i=0;	
$appel= fopen(.......) //mon fichier csv
  $tab[][]=array();
echo '<table border=1>';
for($ligne=fgetcsv($appel,1024); !feof($appel);$ligne=fgetcsv($appel,1024)) //je parcours mon fichier
      {                         
	echo '<tr>';
          $lignetab = explode(";",$ligne[0]);    //decoupe tout les morceaux quand il rencontre le délimiteur " ; "
          for($j=0;$j<9;$j++) <===== //probleme ici , je recupere le tableau sauf la derniere colonne, or j'ai juste besoin de la derniere colonne, le reste j'en ai pas besoin 

	   {				
	            $tab[$i][$j]=$lignetab[$j];	
	             $i++;				
//*** ligne 70 ici ***       echo '<td style=text-align:center>'.$lignetab[$j].'</td>'; //met les morceau sous forme de tableau
	     }	
        }
Mon problème est le suivant, lorsque dans mon 2eme " for " je met $j<9, il me dit 45 fois ( car dans mon fichier csv j'ai 45 ligne)  le message suivant :
Notice: Undefined offset: 8 in C:\.......\www\mapage.php on line 70 

et quand je met  $j<8, tout marche correctement mais ....  :s :s  je n'ai pas ma derniere colonne ,mon tableau s'arrete à l'avant derniere

p.s : je ne sais pas si cela a un rapport mais ma derniere colonne corespond à des valeurs entre 1 et 4 avec une majorité de 0 et 1 seulement mon avant derniere colonne contient des valeur decimal <2 tel que 1.2 ou 0.2 ( il arrondi à 0 ou 1 selon le chiffre mais là n'est pas le pb, moi il me faut la derniere colonne )

merci d'avance pour votre aide

5 réponses

Attention, la 9 ième colonne c'est $tab[$i][8], pas $tab[$i][9]
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41989 internautes nous ont dit merci ce mois-ci

Bonjour

Très étonant que tu n'aies pas plus d'erreur que ça ...
Il y a de très nombreuses bizarreries dans ton programme. As-tu fait un print_r de $tab pour voir comment les données sont enregistrées dans ton tableau ? Sûrement pas comme tu crois.
à l'endoit où est ton $i++, tu incrémentes ton numéro de ligne à chaque champ que tu lis... Ça m'étonnerait que ce soit ça que tu veux faire !
$tab[][]=array(); n'est sûrement pas ce que tu veux faire non plus. $tab= array() suffit !

l'utilisation de explode avec fgetcsv est une aberration. fgetcsv sert justement à découper la ligne lue en champs, c'est absurde de la faire après avec un explode. Tu as dû essayer et trouver que ça ne marchait pas, mais c'est parce que il faut dire à fgetcsv que ton séparateur c'est le point virgule, pour lui c'est la virgule par défaut, donc s'il n'y a pas de virgule dans ta ligne, il ne décompose rien et te rend un tableau à un seul élément $ligne[0] que tu décompose à ton tour ensuite. Tu te compliques beaucoup la vie...
Et tu as oublié la balise </tr>

essaye
$i=0;	
$appel= fopen("texte.txt","r"); //mon fichier csv
$tab=array();
echo '<table border=1>';
for($tab[]=fgetcsv($appel,1024,";"); !feof($appel);$tab[]=fgetcsv($appel,1024,";")) //je parcours mon fichier
     {                         
	echo '<tr>';
          for($j=0;$j<9;$j++)  //probleme ici , je recupere le tableau sauf la derniere colonne, or j'ai juste besoin de la derniere colonne, le reste j'en ai pas besoin 
	   {				
 
echo '<td style=text-align:center>'.$tab[$i][$j].'</td>'; //met les morceau sous forme de tableau
	     }
     echo '</tr>';	
     $i++;
     }
   echo '</table>';

Remarque : ta boucle "for" est désastreuse. si le fichier n'existe pas c'est une boucle infinie...
Messages postés
192
Date d'inscription
dimanche 16 mars 2008
Statut
Membre
Dernière intervention
21 décembre 2014
16
salut

merci bien ! ! j'ai essayé et c'est vrai que c'est plus simple comme ça,
mais comment je peux obtenir que la derniere colonne, car j'ai besoin que de la derniere colonne pour completer ma base de donNée ?
j'ai essayé avec des " echo " ( comme par exempel echo $tab[$i][9]) pour savoir quelle valeur prendre , mais sans succès ?
Peux-tu donner quelques lignes de ton fichier csv ? Car chez moi, j'ai bien tous les champs. Même avec ton programme d'ailleurs.
Messages postés
192
Date d'inscription
dimanche 16 mars 2008
Statut
Membre
Dernière intervention
21 décembre 2014
16
bonjour
merci c'est bon j'y suis arrivé j'ai obtenu le resultat voulu, j'ai pu ainsi ajouté ma colonne dans ma base !