IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Charger un tableau multidimensionnel


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 71
    Par défaut Charger un tableau multidimensionnel
    Bonjour,
    Je ne suis pas vraiment débutant, mais je rame depuis hier sur la gestion d'un tableau et en appelle à vos lumières.

    Dans un fichier texte, j'ai n lignes (enregistrements) de 5 chiffres séparés par des étoiles (séparateur). Exemple avec 3 lignes :
    10*12*14*7*8
    22*44*12*8*9
    11*5*4*2*1

    Je voudrais charger ces valeurs dans un tableau de 5 colonnes, mais je ne sais pas combien mon fichier contient de lignes. Je fais donc une première lecture du fichier pour connaître cette valeur (c'est très lourd, mais ça marche).

    Voici mon code. Tout fonctionne, mais à la ligne 25 je ne sais plus faire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    26
    27
    28
    29
    <?php 
      $enregistrements = 0;			//variable
      $champs = 5;					//constante
      $fichier = "scores/score01.txt";
     
      // On compte le nombre d'enregistrements
      $fp=fopen($fichier,"r");       // ouverture du fichier
      while (!feof ($fp))            // tant qu'on n'a pas atteint la fin du fichier
    	{
        $ligne = fgets($fp, 255);    // stockage des enregistrements dans $ligne
        if(strlen($ligne)!=0):		 // mon dernier enregistrement vaut toujours 0 (???)
          $enregistrements += 1;
    	endif;
        }
      echo "Nombre d'enregistrements : ".$enregistrements."<BR>";
     
       // On parse les enregistrements un à un
       $fp=fopen($fichier,"r");       // ouverture du fichier
       while (!feof ($fp))            // tant qu'on n'a pas atteint la fin du fichier
    	{
        $ligne = fgets($fp, 4096);  // stockage dans $ligne
        $donnee=explode("*",$ligne);  // parsing des données basé sur "*")
        if(strlen($ligne)!=0):
          for ($i=0;$i<=20;$i++){
    	    echo "<BR>$donnee[$i]";		// c'est là que je sèche, je ne sais pas comment entrer mes données parsées dans un tableau x=5 y=3
    	  }
    	endif;
      }
    ?>
    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 370
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 370
    Billets dans le blog
    17
    Par défaut
    Je m'y prendrais ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $data = array( ) ; // Tableau de destination
    $fp = fopen($file, 'r') ;
    while ( ($line = fgets($fp)) !== FALSE ) {
        $data[ ] = sscanf($line, '%d*%d*%d*%d*%d') ; // Empîlage
    }
    fclose($fp) ;

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 329
    Par défaut
    Dans l'absolu un tableau bi-dimensionnel s'utilise ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $tab = array();
    ....
    $tab[$ligne][$colone] = ....

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    avec fgetcsv :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    if (($handle = fopen($fichier, "r")) !== FALSE) {
        while (($line = fgetcsv($handle, 1000, "*")) !== FALSE) {
            $data[] = $line;
            }
        fclose($handle);
    }
    ?>
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 71
    Par défaut [Problème réglé]
    Vous êtes géniaux. Les deux propositions fonctionnent à merveille.
    Je ne connaissais pas la fonction fgetcsv( ) mais quel raccourci !
    Bravo et merci pour tout.

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/12/2005, 15h41
  2. Réponses: 2
    Dernier message: 28/11/2005, 00h36
  3. Nombre de dimensions d'un tableau multidimensionnel
    Par Bruno75 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 08/07/2005, 11h03
  4. type de donnée tableau multidimensionnel
    Par opheliegomes dans le forum Débuter
    Réponses: 2
    Dernier message: 03/02/2005, 13h29
  5. [langage] tableau multidimensionnel
    Par totox17 dans le forum Langage
    Réponses: 3
    Dernier message: 03/12/2002, 16h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo