[RESOLU] créer un array à partir d'un csv (colonne/colonne)

superyms
Invité n'ayant pas de compte PHPfrance

15 août 2006, 14:19

Bonjour, :D

j'ai le fichier 'test.csv' que j'essai depuis maintenant assez longtemps pour ne pas m'en sortir seul !

Code : Tout sélectionner

test.csv ================== pays;fixe;mobile;sms;fax algérie;0,18;0,2;0,08;0,2 argentine;0,07;0,21;0,06;0,09 australie;0,04;0,21;0,05;0,08 autriche;0,04;0,25;0,05;0,08 belgique;0,03;0,18;0,05;0,06
je dois (veux) faire ceci :

1/ il faut savoir que le csv est composée de 5 colonnes (pays, fixe, mobile, sms et fax) séparée par un ";"
2/ je sais que je dois me servir de fgetscsv() pour ouvrir et rapatrié les données !
3/ je sais que les données incluses dans les lignes (rows) peuvent être lues et obtenues ! sous forme de tableaux de données (arrays)

a/obtenir des arrays comme ceci : (colonne par colonne et pas ligne par ligne !)
$pays = array ('algérie', 'autriche', 'australie', ...);
$ fixe = array ('0,15', '0,08', ...);
idem pour les autres

b/une fois ces tableaux créés je souhaite les utiliser dans des boucles (foreahc sinon foravec incrémentation) pour généré :
- une liste déroulante pour les pays :

Code : Tout sélectionner

<select name="ListePays"> <option value='1'>Algeria</option><option value='2'>Argentina</option><option value='3'>Australia</option><option value='4'>Austria</option><option value='5'>Belgium</option></select>
je sais que je peux le faire comme ceci, mais je n'ai pas les données tableau plus haut :
<select name="ListePays" onChange="chklayer(this.value)">
<?php
$pays = array ("Algeria", "Argentina", "Australia", "Austria", "Belgium");

for ($i = 0; $i < count($pays); $i++)
{ echo "<option value='$i'>$pays[$i]</option>";
}
?>
</select>

- une boucle qui affiche les détails des autres colonnes :
<?php
for ($i = 1; $i < count($pays); $i++)
{
echo "<div id=Layer$i class=tarif style=display:none>";
echo "<p><span class=Style2>Téléphonie</span><br />";
echo "Fixe: <span class=Style1><strong>$fixe[$i]</strong></span><br />";
echo "Mobile: <span class=Style1><strong>$mobile[$i]</strong></span></p>";
echo "<p><span class=Style2>Fax: </span><span class=Style1><strong>$fax[$i]</strong></span></p>";
echo "<p><span class=Style2>Sms: </span><span class=Style1><strong>$sms[$i]</strong></span></p>";
echo "</div>";
}
?>
vous voyez je coince ! :shock: :oops:

1/ je ne sais pas comment créer un tableau (array) que je nommerai $pays et qui me donne toutes la liste des pays inclus dans le csv ! (idem pour les autres colonnes !)
2/ je ne sais pas comment iplémenter uen boucle de manière à ce que le 1er élément du tableau array soit $i =1 et non pas =0 (peutre que foreach est meilleure en utilisant un tableau associatif ?

Milles merci de me donner conseil et orientation sinon un début de oslution (une solution complète aussi) car là vraiment je n'en peux plus !

A l'aide ! :idea:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

15 août 2006, 15:29

Salut,

Voila un début de piste pour la construction des tableaux :
boucle ($ligne = fgetcsv()) // à voir dans la doc 
{        
      $pays[] = $ligne[0];
      $fixe[] = $ligne[1];
      //... idem pour les autres   
} 
Pourquoi veux tu que le tableau débute à 1 ça n'aura pas d'influance sur la suite ?

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

15 août 2006, 15:34

Le multipostage est interdit ici... [-X

Tu aurais dû passer par les Rèlements généraux avant de poster

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

superyms
Invité n'ayant pas de compte PHPfrance

15 août 2006, 15:44

Le multipostage est interdit ici... [-X

Tu aurais dû passer par les Rèlements généraux avant de poster
Oui c'est vrai désolé !
Je ne les aient pas lues !

Je n'ai fait que 2 postages du mêm sujet , je pensaitt que cela me donnerai plus de réponses (c'ets bête mais c'ets plutot naïf car au bord du pêtage de plomb !)

<?php boucle ($ligne = fgetcsv()) // à voir dans la doc  
{         
      $pays[] = $ligne[0]; 
      $fixe[] = $ligne[1]; 
      //... idem pour les autres    
} 
Merci je vais essayé ! j'espère que je vais m'en sortir (j'ai lu environs une vintaine de documents sur les arrays dont certains en anglais, j'ai l'impression d'avoir compris mais pas suffisemment pour faire ce que je veux ! c'est frustrant !!!)

Si quelqu'un à plus à proposer qu'il ne se gêne pas !

Meric à tous!

vive PHP vive PHPFrance (et tous ceux qui aident ceux qui essayent comem moi !)

@+

Eléphant du PHP | 184 Messages

15 août 2006, 16:02

T'es tu suffisamment documenté sur la fonction fgetcsv() ? je me pencherais précisément là dessus pour avancer
Image

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

15 août 2006, 20:43

Si quelqu'un à plus à proposer qu'il ne se gêne pas !
Essaie déjà de travailler avec ce dont tu disposes :wink:

Tu n'as pas besoin de te documenter tellement plus sur les array... un test d'affichage pour visualiser le contenu d'un array (tableau) :
<pre>
<?php print_r($array); // avec $array un tableau ... ex : $pays?>
</pre>

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

superyms
Invité n'ayant pas de compte PHPfrance

16 août 2006, 13:37

bonjour, :D

c'est bon j'ai tout résolu, j'ai juste mal lu tout ce qui est lié aux arrays !

voici mon code !
<?php 
//Lire le CSV et lire ligne par ligne (enfin colonne par colonne)
ini_set("auto_detect_line_endings", 1);
$current_row = 1;
$handle = fopen("test.csv", "r");
while ( ($liste = fgetcsv($handle, 10000, ";") ) !== FALSE )
{ 
// J'enregistre toutes les données dans des variables 
      $pays[] = $liste[0]; 
      $fixe[] = $liste[1];
      $mobile[] = $liste[2]; 
      $sms[] = $liste[3];  
      $fax[] = $liste[4];	  
}
//pour les futures incrémentations le nombre d'éléments de chaque colonne
$number_of_fields = count($pays);
?>
pour le menu des pays rien de plus simple !
        <blockquote>
          <select name="ListePays" class="majuscule">
<?php
//incrémentation de la liste de la colonne pays, où PAYS (nom de la colonne est affiché en premier, tant mieux !)
for ($i = 0; $i < $number_of_fields; $i++)
{           echo "<option value='$i' class='majuscule'>$pays[$i]</option>";
}
?>
          </select>
        </blockquote>

Milles merci à tous !

J'ai trouvé grâce à vous alors je partage tout naturellement ! (on ne sait jamais cela peut servir à quelqu'un d'autre !) :wink:

Ps: sert à lire des csv réaliser avec excel !

Mammouth du PHP | 991 Messages

16 août 2006, 13:41

le must c'est quelqu'un marque le sujet comme resolu !!!!
DevOps, Symfony4, Hoa

Petit nouveau ! | 1 Messages

16 août 2006, 13:55

[quote="thehawk"]le must c'est quelqu'un marque le sujet comme resolu !!!![/quote]

Oui en effet, depuis je suis enregistré dans le forum !
Je demande aux modérateurs d'ajouter la mention "[Résolu]" (je ne peux pas le faire, car j'étais invité lorsque j'ai écrit mon message ainsi que sa solution !)

@+ :)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

16 août 2006, 14:12

le must c'est quelqu'un marque le sujet comme resolu !!!!
Oui en effet, depuis je suis enregistré dans le forum !
Je demande aux modérateurs d'ajouter la mention "[Résolu]"
c'est fait ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer