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 :

Faire un tableau dynamique


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juillet 2012
    Messages : 58
    Par défaut Faire un tableau dynamique
    Bonjour, après avoir chercher pas mal de temps, je poste ma demande!!
    Voilà,j'ai une base de donnée exportée en fichier en format csv, je dois mettre ces données dans un tableau...
    pour le moment, ça fonctionne parce que j'ai codé en dur les infos relatives à ce fichier...sauf qu'il ne fonctionnera plus si je change de fichier... je voudrais donc pouvoir faire ce tableau sans savoir le nombre de colonne, leur nom... le faire dynamiquement!
    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
    //Permet de lire le fichier csv et de séparer les colonnes par lignes
    $handle = fopen($fichier, "r"); // ouvre le fichier csv en lecture seule ("r")
     
    //Création du tableau qui contiendra les données du fichier csv	
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) 
    {
    	$num2 = count($data); //nous donne le nombre de champs/colonnes
     
    	for ($c=0; $c < $num2-1; $c++) 
    	{	
    		$donneesCSV[]= array(
    		'NUMTICKET_CSV'=>''.$data[$c++].'',
    		'DATEHEURETIC_CSV'=>''.$data[$c++].'',
    		'MONTANT_CSV'=>''.$data[$c++].'',
    		'TYPEACHAT_CSV'=>''.$data[$c++].''  );
     
    	} 
    }
    Voilà!! je galère franchement!!! Y a t-il un développeur pour me sauver?!!! lol

  2. #2
    Membre averti
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juillet 2012
    Messages : 58
    Par défaut
    Je m'auto réponds...
    J'ai utilisé un switch pour parer à tous les nombres de colonnes...mais je ne suis pas sure que ça soit la bonne solution!!
    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
     $donneesCSV = array();	
     
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) 
    {
    	$num2 = count($data); //nous donne le nombre de champs
     
    	for ($c=0; $c < $num2-1; $c++) 
    	{	
    		switch ($num2) 
    		{
    			case 0: $erreur_fichier= "il n'y a pas de colonne donc je suppose que le fichier est vide!";
    			break;
    			case 1:$array= array('1'=>''.$data[$c++].'');
    			break;
    			case 2:$array= array('1'=>''.$data[$c++].'','2'=>''.$data[$c++].'');
    			break;			
    			 case 3:
    			$array= array('1'=>''.$data[$c++].'','2'=>''.$data[$c++].'','3'=>''.$data[$c++].'');
    			break;
    			   case 4:
    			$array= array('1'=>''.$data[$c++].'','2'=>''.$data[$c++].'','3'=>''.$data[$c++].'','4'=>''.$data[$c++].'');
    			break;
    		}
     
    		$donneesCSV[] = $array;
    	}
    }
    Voilà si y a une autre solution je suis preneuse!!!

  3. #3
    Membre expérimenté
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    152
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2003
    Messages : 152
    Par défaut
    Ca devrait le faire comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //Permet de lire le fichier csv et de séparer les colonnes par lignes
    $handle = fopen($fichier, "r"); // ouvre le fichier csv en lecture seule ("r")
     
    //Création du tableau qui contiendra les données du fichier csv	
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) 
    {		
    	foreach($data) as $key => $val) {
    		$arr[] = $val;
    	}
     
    	$donneesCSV[]= $arr; 
    }

  4. #4
    Membre averti
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juillet 2012
    Messages : 58
    Par défaut
    Citation Envoyé par djibxav Voir le message
    Ca devrait le faire comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //Permet de lire le fichier csv et de séparer les colonnes par lignes
    $handle = fopen($fichier, "r"); // ouvre le fichier csv en lecture seule ("r")
     
    //Création du tableau qui contiendra les données du fichier csv	
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) 
    {		
    	foreach($data) as $key => $val) {
    		$arr[] = $val;
    	}
     
    	$donneesCSV[]= $arr; 
    }
    Euh, ton code tel quel ne m'affiche rien , en le modifiant un peu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach($data as $key => $val) {
    	$arr[]= $val;
    	}
     
    	$donneesCSV[]= $arr;
    via un print_r($donnéesCSV) il m'affiche 150 fois chaque enregistrement et si j'enlève les [] à , il m'affiche tous les enregistrements mais que la dernière colonne...donc à priori ça ne fonctionne pas... mais merci quand même!!

  5. #5
    Membre chevronné
    Avatar de kalimukti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2011
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 262
    Par défaut
    Hello,
    Je suis pas sûr d'avoir bien compris ton problème... mais au niveau juste algorithme, est-ce qu'un truc comme ça passerait ?
    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
     
     $donneesCSV = array();	
     
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) 
    {
    	$num2 = count($data); //nous donne le nombre de champs
    	if ($num2!=0)
    	{
    		for ($c=0; $c < $num2; $c++) // pourquoi $num2-1 ???
    		{	
    			$array[] = $data[$c];	 
    		}
    		$donneesCSV[] = $array;
    	}
    	else
    	{
    		$erreur_fichier= "il n'y a pas de colonne donc je suppose que le fichier est vide!";
    		// je suis pas sûr de comprendre l'utilité de cette ligne
    		// une ligne peut être vide $num2==0 sans que le fichier soit vide...
    	}
    }

  6. #6
    Membre averti
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juillet 2012
    Messages : 58
    Par défaut
    Citation Envoyé par kalimukti Voir le message
    Hello,
    Je suis pas sûr d'avoir bien compris ton problème... mais au niveau juste algorithme, est-ce qu'un truc comme ça passerait ?
    Mon problème: au départ, je sais combien de colonnes il y a dans mon fichier et le nom de ces colonnes, donc je peux faire mon tableau comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) 
    {
    	$num2 = count($data); //nous donne le nombre de champs
     
    	for ($c=0; $c < $num2-1; $c++) 
    	{
    	        $donneesCSV[]= array(
    		'NUMTICKET_CSV'=>''.$data[$c++].'',
    		'DATEHEURETIC_CSV'=>''.$data[$c++].'',
    		'MONTANT_CSV'=>''.$data[$c++].'',
    		'TYPEACHAT_CSV'=>''.$data[$c++].''  );
    	}   
    }
    sauf que je dois le rendre dynamique, c'est à dire que ce tableau doit être fait en ne connaissant pas le contenu de mon fichier csv... donc je ne connais pas le nombre de colonnes, leurs noms... et le problème: comment faire ce tableau en ne connaissant pas ces renseignements?

    Par contre, j'ai testé ton code et même remarque que pour djibxav, tel quel il m'affiche 150 fois chaque enregistrement et en enlevant les [] il ne m'affiche que la derniere colonne

  7. #7
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    voici un bout de code qui devrait aller :
    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
    <?php
     
    $first_row = true;
    $fields    = array();
    $data      = array();
     
    while(($row = fgetcsv($handle, 1000, ';')) !== false) {
        if ($first_row) {
            $fields    = $row;
            $first_row = false;
        }
        else {
            $data[] = array_combine($fields, $row);
        }    
    }
    Je considère que ton csv est bien formé et que la 1ère ligne contient les en-têtes des colonnes

  8. #8
    Membre averti
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juillet 2012
    Messages : 58
    Par défaut
    rawsrc,je n'ai pas eu le temps de tester ton code...des que c'est fait je mettrais les résultats!!
    Mon nouveau souci c'est que bon mon tableau est dynamique grace à mon sxitch mais j'ai une requete merge qui doit l'être aussi maintenant...et pareil que pour le tableau,je rame!!!!
    Ma requête merge fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for($a=0;$a<$ligneTableau;$a++)
    {
    	$sqlMerge= "MERGE INTO $NOMTABLE  USING dual ON ($CLEPRIMAIRE = '".$donneesCSV[$a]['1']."')
    	WHEN MATCHED THEN UPDATE SET DATEHEURETIC=TO_DATE('".$donneesCSV[$a]['2']."', 'SYYYY-MM-DD HH24:MI:SS'), MONTANT = '".$donneesCSV[$a]['3']."', TYPEACHAT='".$donneesCSV[$a]['4']."'
    	WHEN NOT MATCHED THEN INSERT (NUMTICKET,DATEHEURETIC, MONTANT, TYPEACHAT) VALUES ('".$donneesCSV[$a]['1']."',TO_DATE('".$donneesCSV[$a]['2']."', 'SYYYY-MM-DD HH24:MI:SS'),'".$donneesCSV[$a]['3']."','".$donneesCSV[$a]['4']."')";
     
    	$resultatMerge = $db->exec($sqlMerge);
     
    }
    Alors, la grande question qui se pose : comment rendre cette requête dynamique... je ne connais pas le nombre de colonne, ni leur nom par avance... et faut que cette requête s'adapte à toutes les possibilités comme pour le tableau...
    au secours!!!!!!!

  9. #9
    Membre averti
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juillet 2012
    Messages : 58
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    Bonjour,

    voici un bout de code qui devrait aller :
    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
    <?php
     
    $first_row = true;
    $fields    = array();
    $data      = array();
     
    while(($row = fgetcsv($handle, 1000, ';')) !== false) {
        if ($first_row) {
            $fields    = $row;
            $first_row = false;
        }
        else {
            $data[] = array_combine($fields, $row);
        }    
    }
    Je considère que ton csv est bien formé et que la 1ère ligne contient les en-têtes des colonnes
    merci pour ce code qui fonctionne, il m'affiche les noms des colonnes et tout! c'est magique...mais j'avoue pas tout comprendre!! je vais faire des recherches!! par contre si je veux afficher un élément du tableau je fais comment? m'affiche array ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mongoose Faire un tableau dynamique
    Par sabrinouch dans le forum NodeJS
    Réponses: 5
    Dernier message: 01/12/2014, 17h17
  2. [XL-2010] Faire un tableau dynamique croisé avec du texte
    Par PaulG2B dans le forum Excel
    Réponses: 5
    Dernier message: 17/04/2014, 16h32
  3. [E-03][Vba]faire une case totaux dans un tableau dynamique
    Par Overcrash dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/06/2008, 11h39
  4. Comment faire un tableau dynamique ?
    Par Nico128 dans le forum WinDev
    Réponses: 3
    Dernier message: 18/03/2008, 11h13

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