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

Bibliothèques et frameworks PHP Discussion :

[Artichow] Graphes avec stats


Sujet :

Bibliothèques et frameworks PHP

  1. #21
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Le meilleur cours sur les tableaux : http://php.net/array

    Suffit de toutes façons de poser des questions sur ce forum


    Quand bien même je trouve ta méthode étrange. Tu passes par sql pour te fournir un tableau alors que la méthode que je t'ai fournie te fourni un tableau...

  2. #22
    Membre confirmé Avatar de M@XflY
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 95
    Par défaut
    en fait pour faire simple

    j'ai été pris un peu par le temps et mon tuteur m'as demandé une maquette pour vendredi dernier donc j'ai dus mettre les bouché doubles

    j'ai donc appliqué les techniques que je connaissait le meiux et comme j'arrivé pas à trouvé de cours cohérent sur les tableaux en php ( et pas moyen de remettre la main sur ceux que j'avais de l'année dernière, comme par hasard loi de Murphy ) j'ai donc été au plus simple

    mais maintenant que cette pression est passé je vais pouvoir étudié ta technique et en apprendre d'avantage sur le php (c''est quand meme fais pour ça l'alternance)

    merci encore pour ton aide et le lien

  3. #23
    Membre confirmé Avatar de M@XflY
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 95
    Par défaut
    bon ben retour au point de départ

    je viens d'essayé avec les base de données et Artichow n'accepte que des tabeaux

    bon ben je suis bon pour me faire un cours intensif sur les tableaux si je veut résoudre ma maquette avant la fin de la semaine

    au fait y a moyen d'automatiser tout ça ?

  4. #24
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Tu vois vraiment les difficultés là où il n'y en a pas... Un tableau c'est un tableau. point barre. C'est un des éléments de base de l'algorithmie, le fait qu'on soit en php ne change rien.

  5. #25
    Membre confirmé Avatar de M@XflY
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 95
    Par défaut
    bon pour reprendre avec l'idée du tableau en php et des graphes

    j'ai ça comme script php qui me pond les graphes :
    (pour l'instant je traite les probleme un par un on verra pour le reste apres)

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    <?php
    require_once "../../LinePlot.class.php";
     
    $graph = new Graph(800, 500);
    $graph->setAntiAliasing(TRUE);
     
    $values = array(1, 7, 3, 2.5, 5, -4.5, -5);
    $plot = new LinePlot($values);
    $plot->setBackgroundColor(new Color(245, 245, 245));
     
    $plot->hideLine(TRUE);
    $plot->setFillColor(new Color(180, 180, 180, 75));
     
    $plot->grid->setBackgroundColor(new Color(235, 235, 180, 60));
     
    $plot->yAxis->setLabelPrecision(2);
    $plot->yAxis->setLabelNumber(6);
     
    $days = array(
    	'Lundi',
    	'Mardi',
    	'Mercredi',
    	'Jeudi',
    	'Vendredi',
    	'Samedi',
    	'Dimanche'
    );
    $plot->xAxis->setLabelText($days);
     
    $plot->setSpace(6, 6, 10, 10);
     
    $plot->mark->setType(MARK_IMAGE);
    $plot->mark->setImage(new FileImage("smiley.png"));
     
    $plot->label->set($values);
    $plot->label->move(0, -23);
    $plot->label->setBackgroundGradient(
    	new LinearGradient(
    		new Color(250, 250, 250, 10),
    		new Color(255, 200, 200, 30),
    		0
    	)
    );
    $plot->label->border->setColor(new Color(20, 20, 20, 20));
    $plot->label->setPadding(3, 1, 1, 0);
     
    $graph->add($plot);
    $graph->draw();
    ?>
    et en gros ça donne ça :


    j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $values = array(1, 7, 3, 2.5, 5, -4.5, -5);
    qui m'indique les valeurs en ordonnées et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $days = array(
    	'Lundi',
    	'Mardi',
    	'Mercredi',
    	'Jeudi',
    	'Vendredi',
    	'Samedi',
    	'Dimanche'
    );
    qui m'indique les valeurs en abscisse

    donc à la place de ça il faut que je lui indique en abscisse les valeurs à selectionné depuis le tableau construit à partir du CSV (pour exemple le Nb_PDP_Request pour reprendre ceux que je t'avais donné) et en ordonnée là c'est la constante donc je vais pouvoir lui mettre un INCLUDE vers le tableau des heures (que je stockerai dans un autre fichier)

    et donc là où je but c'est pour remplacer ces deux lignes !!

    PS : en fait mon idée de tout à l'heure et là où ça a pas marché c'est que j'ai essayé d'intégré une requette SQL en ordonné et il m'a envoyé sur les rose me précisant qu'il ne s'agissait pas d'un array (donc d'un tableau)

  6. #26
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Je te donne un exemple :

    Dans mon jardin, je fais pousser des noix de coco, des pommes et des tomates. A chaque fin de trimestre je comptabilise le nombre de fruits que j'ai ramassé pour chaque especes dans le fichier csv suivant :
    Code fichier csv : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Pommes,23
    Tomates,0
    Noix de coco,34
    Noix de coco,12
    Pommes,65
    Tomates,25
    Pommes,100
    Tomates,10
    Noix de coco,35
    Pommes,10
    Tomates,67
    Noix de coco, 46

    J'aimerais bien me faire un graphique récapitulatif en fin d'année :
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    <html>
    	<head>
    		<style type="text/css">
    		body { font:10px sans-serif; }
    		.graph { width:180px; border:1px solid #ccc; }
    		.graph h3 { text-align:center; margin: 4px; }
    		.graph dl { margin:4px }
    		.graph dl dd { width: 102px; border:1px solid #666; }
    		.graph dl dd div { background: #ddd; padding-left: 2px;}
    		</style>
    	</head>
    	<body>
        <?php
        function afficher_graph($title, $data) {
            ?>
    		<div class="graph">
    			<h3><?php echo $title; ?></h3>
    			<dl>
                <?php foreach($data as $key => $value) { 
    				echo '<dt>'. $key .'</dt>';
    				echo '<dd><div style="width:'. $value .'px">'. $value .'</div></dd>';
                } ?>
    			<dl>
    		</div>
            <?php
        }
        function parse_csv_file($file, $columnheadings = false, $delimiter = ',', $enclosure = "\"") {
     
           $row = 1;
           $rows = array();
           $handle = fopen($file, 'r');
     
           while (($data = fgetcsv($handle, 1000, $delimiter, $enclosure )) !== FALSE) {
     
               if (!($columnheadings == "false") && ($row == 1)) {
                   $headingTexts = $data;
               } elseif (!($columnheadings == "false")) {
                   foreach ($data as $key => $value) {
                       unset($data[$key]);
                       $data[$headingTexts[$key]] = $value;
                   }
                   $rows[] = $data;
               } else {
                   $rows[] = $data;
               }
               $row++;
           }
     
           fclose($handle);
           return $rows;
        }
        $csv = parse_csv_file('graphs.csv', true, ',');
        //var_dump('<pre>', $csv, '</pre>');
     
        //{{{ extraction des données pour construire les graphes
        $data = array();
        $keys = array('Q1', 'Q2', 'Q3', 'Q4');
        foreach($csv as $row) {
            if (!isset($data[$row[0]])) {
                $data[$row[0]] = array();
            }
            $found = false;
            reset($keys);
            while(!$found && list(,$possible_key) = each($keys)) {
                $found = isset($data[$row[0]][$possible_key]) ? false : $possible_key;
            }
            if ($found) {
                $data[$row[0]][$found] = $row[1];
            }
        }
        //var_dump('<pre>', $data, '</pre>');
        //}}}
     
        foreach($data as $title => $graph) {
            afficher_graph($title,  $graph);
        }
        ?>
    	</body>
    </html>
    Ce qui me donne dans mon Firefox :


    Le code se décompose en 3 parties :
    1. stockage du fichier csv dans un tableau grâce à parse_csv_file
    2. extraction des données pertinentes et construction d'un tableau exploitable. Cette partie est la plus importante. C'est là qu'on a besoin de connaissances en gestion de tableau
    3. affichage du graph pour chaque espece. Ici c'est un histogramme horizontal à l'aide de css, pour artichow, il suffit d'extraire les bonnes infos, du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $values = array_values($data);
    $labels = array_keys($data);
    Voilà, il ne reste plus qu'à faire le parallèle entre mes noix de coco et tes serveurs

  7. #27
    Membre confirmé Avatar de M@XflY
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 95
    Par défaut
    ok merci beaucoup je regarde ça de suite

    en adaptant il faudra juste que je mette un fichier avec le tableau en php des heures à part et que je l'appel via une INCLUDE

    comme ça se sera plus facile à éditer

  8. #28
    Membre confirmé Avatar de M@XflY
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 95
    Par défaut
    je viens d'essayé en m'aidant de ton fichier et ça me donne un résultats bizarre :

    ‰PNG  IHDR ˜£f[œØý±oØýá)åvp¼ÛÞ-Ôìq ½ëiøí´ÖY*Ï)n?×wsݾËM˜ì—“7ö̆-<–o¢YVÁ(N@Õ#,Aº†Æ‚å¸PÖœâ8¹É*ˆe¦9Å>?ÓØÛ°”wŠ[+¼[êQG%‚¬ &Ž’––òÓj·z8k¶¬Pq,eÙ°/â·å]³½]‚¬&M¬%4_çœK945—Ú^aÃâœË}ùkÆE-r^hÛâç–—7·`¨åR’V—#²j41èÞÂPç•oíâ÷Чfïá6ogZ΃ HÛiÃâgKfc š\‚ë¶DÙÒåñDzD¹µ%Ü*åAdåhóâçÕé"ȇ\

    une plein page de caractère comme ça

    mon code est le suivant j'essaye de le debugger :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    <?php 
     
    ## ........... Fonction Importation du CSV ............... ##	
        function parse_csv_file($file, $columnheadings = false, $delimiter = ',', $enclosure = "\"") {
     
           $row = 1;
           $rows = array();
           $handle = fopen($file, 'r');
     
           while (($data = fgetcsv($handle, 1000, $delimiter, $enclosure )) !== FALSE) {
     
               if (!($columnheadings == "false") && ($row == 1)) {
                   $headingTexts = $data;
               } elseif (!($columnheadings == "false")) {
                   foreach ($data as $key => $value) {
                       unset($data[$key]);
                       $data[$headingTexts[$key]] = $value;
                   }
                   $rows[] = $data;
               } else {
                   $rows[] = $data;
               }
               $row++;
           }
     
           fclose($handle);
           return $rows;
        }
        $csv = parse_csv_file('C:\Documents and Settings\ghipeau\Bureau\EasyPHP1-8\www\xlsmagique\liste\exemple.csv', true, ',');
    ?>
     
    <?php
     
    ## ........... Fonction Creation du graphe ............... ##	
    	require_once "../../LinePlot.class.php";
     
    $graph = new Graph(600, 400);
    $graph->setAntiAliasing(TRUE);
     
    $data = array(); /*selection du CSV pour tracer la courbe*/
     
    $plot = new LinePlot($values);
    $plot->setBackgroundColor(new Color(245, 245, 245));
     
    $plot->hideLine(TRUE);
    $plot->setFillColor(new Color(180, 180, 180, 75));
     
    $plot->grid->setBackgroundColor(new Color(235, 235, 180, 60));
     
    $plot->yAxis->setLabelPrecision(2);
    $plot->yAxis->setLabelNumber(6);
     
    $heures=array 
    ('00h00', '00h15', '00h30', '00h45', '01h00', '1h15', '1h30', '1h45', '2h00', '2h15', '2h30', '2h45', '3h00', '3h15', '3h30', '3h45', '4h00', '4h15', '4h30', '4h45', '5h00', '5h15', '5h30', '5h45', '6h00', '6h15', '6h30', '6h45', '7h00', '7h15', '7h30', '7h45', '8h00', '8h15', '8h30', '8h45', '9h00', '9h15', '9h30', '9h45', '10h00', '10h15', '10h30', '10h45', '11h00', '11h15', '11h30', '11h45', '12h00', '12h15', '12h30', '12h45', '13h00', '13h15','13h30', '13h45', '14h00', '14h15', '14h30', '14h45', '15h00', '15h15', '15h30', '15h45', '16h00', '16h15', '16h30', '16h45', '17h00', '17h15', '17h30', '17h45', '18h00', '18h15', '18h30', '18h45', '19h00', '19h15', '19h30', '19h45', '20h00', '20h15', '20h30', '20h45', '21h00', '21h15', '21h30', '21h45', '22h00', '22h15', '22h30', '22h45', '23h00', '23h15', '23h30', '23h45', '00h00');
    $plot->xAxis->setLabelText ($heures); /*Heures à afficher sur les abscisses*/
     
    $plot->setSpace(6, 6, 10, 10);
     
    $plot->label->set($values);
    $plot->label->move(0, -23);
    $plot->label->setBackgroundGradient(
    	new LinearGradient(
    		new Color(250, 250, 250, 10),
    		new Color(255, 200, 200, 30),
    		0
    	)
    );
    $plot->label->border->setColor(new Color(150, 150, 150, 150));
    $plot->label->setPadding(3, 1, 1, 0);
     
    $graph->add($plot);
    $graph->draw();
    ?>

    je vais finir par me lancer dans la cryptographie car il est bizarre ce résultats je vois pas trop où ça bugg

    PS: par contre je n'ai pas encore mis les includes pour avoir le tableau des heures sur un autre fichier je ferai ça apres

  9. #29
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Artichow génère des images.
    Or toi tu envoie le contenu d'une image dans un flux html, ce qui est mal.

    Dans un flux html, tu pointes vers une image grace à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="lien_vers_mon_image" />
    où lien_vers_mon_image est soit une image statique (.gif, .jpg, .png) soit générée dynamiquement par un script php.

  10. #30
    Membre confirmé Avatar de M@XflY
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 95
    Par défaut
    bon je verrai ça demain à tete reposé

    car là je sais plus ce que je fais et ça part dans tous les sens


    par contre d'apres ce que je comprend dans ton script :

    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
    $data = array();
        $keys = array('Q1', 'Q2', 'Q3', 'Q4');
        foreach($csv as $row) {
            if (!isset($data[$row[0]])) {
                $data[$row[0]] = array();
            }
            $found = false;
            reset($keys);
            while(!$found && list(,$possible_key) = each($keys)) {
                $found = isset($data[$row[0]][$possible_key]) ? false : $possible_key;
            }
            if ($found) {
                $data[$row[0]][$found] = $row[1];
            }
        }
    c'est que cette ligne correspond aux heures dans mon cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $keys = array('Q1', 'Q2', 'Q3', 'Q4');
    et que celle ci :
    avec ce qui suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    foreach($csv as $row) {
            if (!isset($data[$row[0]])) {
                $data[$row[0]] = array();
            }
            $found = false;
            reset($keys);
            while(!$found && list(,$possible_key) = each($keys)) {
                $found = isset($data[$row[0]][$possible_key]) ? false : $possible_key;
            }
            if ($found) {
                $data[$row[0]][$found] = $row[1];
    indique les champs dans le CSV à récupérer

    arrete moi si je me trompe !!

  11. #31
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    L'idée est de partir du tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    [[Pommes,       23],
     [Tomates,       0],
     [Noix de coco, 34],
     [Noix de coco, 12],
     [Pommes,       65],
     [Tomates,      25],
     [Pommes,      100],
     [Tomates,      10],
     [Noix de coco, 35],
     [Pommes,       10],
     [Tomates,      67],
     [Noix de coco, 46]]
    Pour arriver à ce tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [
      'Pommes'       => [23, 65, 100, 10],
      'Tomates'      => [0, 25, 10, 67],
      'Noix de coco' => [34, 12, 35, 46]
    ]
    Par convenances personnelles (comme toute la démarche au passage) j'avais envie d'avoir les labels dans le tableau. Donc soit on garde comme c'est car on sait que pour tout le csv, le premier chiffre correspond à Q1, le deuxième à Q2, ... Soit on produit le tableau suivant :
    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
    [
      'Pommes' => [
        'Q1' => 23,
        'Q2' => 65,
        'Q3' => 100,
        'Q4' => 10
      ],
      'Tomates' => [
        'Q1' => 0,
        'Q2' => 25,
        'Q3' => 10,
        'Q4' => 67
      ],
      'Noix de coco' => [
        'Q1' => 34,
        'Q2' => 12,
        'Q3' => 35,
        'Q4' => 46
      ]
    ]

  12. #32
    Membre confirmé Avatar de M@XflY
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 95
    Par défaut
    en fait j'essaye dans ton code de localisé les étapes que tu me donne :

    Le code se décompose en 3 parties :
    1. stockage du fichier csv dans un tableau grâce à parse_csv_file
    2. extraction des données pertinentes et construction d'un tableau exploitable. Cette partie est la plus importante. C'est là qu'on a besoin de connaissances en gestion de tableau
    3. affichage du graph pour chaque espece.


    je pense que le 1) c'est cette partie :

    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
    ## Stockage du fichier csv dans un tableau grâce à parse_csv_file ##
       }
        function parse_csv_file($file, $columnheadings = false, $delimiter = ',', $enclosure = "\"") { /*Ici on indique que l'on veut récupérer un fichier CSV et les délimiteurs avec les ' et les , */
     
           $row = 1; /* ici on indique le nombre de champ (row) soit 1 */
           $rows = array(); /* le champ sera stocké dans un tableau (array) */
           $handle = fopen($file, 'r'); /* le pointeur ouvre le fichier  */
     
           while (($data = fgetcsv($handle, 1000, $delimiter, $enclosure )) !== FALSE) { /*  la fonction fgetcsv cherche les champs CSV */
     
               if (!($columnheadings == "false") && ($row == 1)) { /* si une entete du tableau n'existe effectué l'action qui suit : */
                   $headingTexts = $data; /* une valeur d'entete du tableau correspondra à une valeur */
               } elseif (!($columnheadings == "false")) { /* dans le cas d'une colonne */
                   foreach ($data as $key => $value) { /* le tableau est parcourus à la fonction foreach et pour chaque valeur trouvé une variable lui ait asigné */
                       unset($data[$key]); /* pas trop compris pourquoi tu utilise la fonction unset ici ??? */
                       $data[$headingTexts[$key]] = $value; /*  une valeur du tableau renvera à une variable key */
                   }
                   $rows[] = $data; /* un champ correspond à une valeur */
               } else {
                   $rows[] = $data; /* dans l'autre cas un champ correspond à une valeur */
               }
               $row++; /* parcours des champs */
           }
     
           fclose($handle); /* fermeture du pointeur */
           return $rows; /* fin de la spécification des champs */
        }
        $csv = parse_csv_file('graphs.csv', true, ','); /* ici on indique la localisation du fichier CSV à traiter */
    je met des commentaires et dis moi si j'ai bien compris le code ?

    car j'ai besoin de comprendre ce que tu as écrit pour pouvoir l'adapter (d'ailleurs ça me servira pour mes oraux car on nous demande de connaitre notre code pour pouvoir le modifié)

    là où j'ai le plus de mal à voir où ça se trouve dans ton code c'est plus pour la partie 2:
    extraction des données pertinentes et construction d'un tableau exploitable. Cette partie est la plus importante

    j'arrive pas à savoir où tu indique au graphes ce que tu choisi comme colonne dans ton fichiers CSV (transformé en tableau php)

    je pense que c'est là dedans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    foreach($csv as $row) {
            if (!isset($data[$row[0]])) {
                $data[$row[0]] = array();
            }
            $found = false;
            reset($keys);
            while(!$found && list(,$possible_key) = each($keys)) {
                $found = isset($data[$row[0]][$possible_key]) ? false : $possible_key;
            }
            if ($found) {
                $data[$row[0]][$found] = $row[1];
    mais faut que j'approfondisse en mettant des commentaire
    faut que j'arrive à finir ça pour demain car apres je suis censé pour la semaine prochaine lui faire une maquette avec les graphes en visuel sur le site et si j'arrive à comprendre comment on fait c'est foutus graphes j'aurai fait le principale

    PS : je te remercie encore pour toute l'aide que tu m'apporte ça m'aide énormément et j'en apprend beaucoup car ce ne sont pas les cours et les profs (ni les élèves que j'ai ) qui m'aide de ce côté là et comme je suis un vrai newbie là dedans faut bien commencé par quelque chose. Alors désolé si parfois je te fais répéter car j'ai dus mal à comprendre certaine chose, j'espere un jour avoir autant de connaissance que toi et pouvoir les faire partager à ceux qui m'entoure, encore merci.

  13. #33
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Citation Envoyé par M@XflY
    je met des commentaires et dis moi si j'ai bien compris le code ?

    car j'ai besoin de comprendre ce que tu as écrit pour pouvoir l'adapter
    Alors ce n'est pas mon code, il est pris sur les commentaire de http://php.net/fgetcsv

    Néanmoins tu as faux. En anglais, 'row' == 'ligne' et pas 'champ' Donc tes commentaire sont faux.

    Citation Envoyé par M@XflY
    (d'ailleurs ça me servira pour mes oraux car on nous demande de connaitre notre code pour pouvoir le modifié)
    Quand tu utilises une api externe, tu n'as pas besoin normalement de la commenter et de comprendre comment elle fonctionne. Est-ce qu'on va te demander de modifier Artichow ? Non, à moins qu'elle ne fonctionne pas ou qu'elle ne réponde pas au besoin... Dans ce cas là la réponse à la question du client... euh... prof est "C'est possible mais ça coûte x jours de boulot"
    Mais c'est vrai que c'est mieux de comprendre ce que fait une misérable fonction...
    Donc l'idée de la fonction est selon moi :
    1. on ouvre un pointeur sur un fichier csv
    2. on parcours ce fichier ligne par ligne grâce à la fonction fgetcsv
    3. un fichier csv peut contenir des entetes sur la première ligne (ce ne sont pas des données mais le noms des colonnes). Donc si on demande les entetes, on stockera les données associativement tableau['cle'] => 'value', sinon on stockera numeriquement tableau[3] => 'value'
    4. ainsi de suite pour toutes les lignes qu'on stocke dans $rows et qu'on retourne à la fin.
    Concernant le unset, j'imagine que c'est pour libérer de la place mémoire

    Citation Envoyé par M@XflY
    j'arrive pas à savoir où tu indique au graphes ce que tu choisi comme colonne dans ton fichiers CSV (transformé en tableau php)
    Ben j'ai dit que par convention chez moi que la première colonne contenait le nom du fruit, et la deuxième colonne le nombre ramassés à la fin du trimestre.
    donc tu regardes où j'utilise $row[0] et $row[1] et c'est marre.
    Par contre au risque de me répeter, tu n'est pas obligé de te baser totalement sur mon code. Si tu pars du principe que tes labels seront toujours [00h00, 00h15, ..., 23h45], alors tu peux simplifier, à condition d'en tenir compte dans ta fonction qui affichera les graphes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        $data = array();
        foreach($csv as $row) {
            if (!isset($data[$row[0]])) {
                $data[$row[0]] = array();
            }
            $data[$row[0]][] = $row[1];
        }
        //var_dump('<pre>', $data, '</pre>');
    Plus simple non ? Pour toi il y aura bien sur des tests en plus, genre est-ce que la i° colonne est 'all'...


    Citation Envoyé par M@XflY
    faut que j'arrive à finir ça pour demain car apres je suis censé pour la semaine prochaine lui faire une maquette avec les graphes en visuel sur le site et si j'arrive à comprendre comment on fait c'est foutus graphes j'aurai fait le principale
    Je te conseille fortement de travailler par étapes. Pour l'instant tu mélange tout. Tu t'occupes d'une librairie graphique alors que tu n'arrives pas à extraire les données pertinentes de ton csv.
    Donc dans un premier temps, oublie artichow et concentre toi sur l'extraction de données. Et pour un seul graphe ("Nb de Create PDP Roaming In" par exemple).
    D'abord tu utilises print_r ou var_dump (décommente la ligne dans le code ci-dessus) pour voir si tu construit un tableau qui correspond à tes attentes.
    Quand c'est bon, tu passes à la partie affichage. Tu utilise par exemple ma fonction qui affiche un histogramme en html/css. Ou alors tu affiche un tableau html + un titre pour chaque machine. L'idée étant de représenter d'une manière lisible à l'utilisateur des infos contenus dans un fichier csv. Il vaut mieux montrer à ton profs un truc qui marche mais pas joli visuellement qu'un truc qui marche pas.
    Une fois que c'est bon, tu t'occupes d'artichow. Et je te conseille vraiment de ne t'en préoccuper qu'à la fin. Car en passant par artichow il te faudra réfléchir à comment envoyer une image au milieu d'un flux html...



    EDIT:
    Au fait, il y a un bug dans la fonction
    La bonne version :
    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
        function parse_csv_file($file, $columnheadings = false, $delimiter = ',', $enclosure = "\"") {
     
           $row = 1;
           $rows = array();
           $handle = fopen($file, 'r');
     
           while (($data = fgetcsv($handle, 1000, $delimiter, $enclosure )) !== FALSE) {
     
               if (!($columnheadings == false) && ($row == 1)) {
                   $headingTexts = $data;
               } elseif (!($columnheadings == false)) {
                   foreach ($data as $key => $value) {
                       unset($data[$key]);
                       $data[$headingTexts[$key]] = $value;
                   }
                   $rows[] = $data;
               } else {
                   $rows[] = $data;
               }
               $row++;
           }
     
           fclose($handle);
           return $rows;
        }

  14. #34
    Membre confirmé Avatar de M@XflY
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 95
    Par défaut
    ok je vais m'occuper de l'extraction des données en premier

    de toute façon ce qui me pose le plus de probleme pour l'instant c'est les données venant du CSV car en ce qui concerne les heures c'est une constante donc à la rigueur je m'en fiche

    je fait un tableau avec les heures que je stocke dans un fichier et que j'appel grace à un INCLUDE

    le principal ici c'est d'arriver à avoir un tableau en php tiré du CSV
    apres j'appel la colonne du tableau dont j'ai besoin

    le probleme quie j'ai c'est que je me base trop sur les requettes SQL qui sont beaucoup plus simple pour le traitement d'un tableau que le PHP (il me semble)
    suffit juste de lui dire :

    Select Line FROM table_base where Line='All';

    et hop il te fais le trie sur la colonne All
    et ensuite lui dire de prendre la colonne qui t'intéresse une fois le trie effectué

    c'est claire que si je pouvais faire ça ce serait plus simple ça à l'air plus coton en PHP (surtout que je suis une noob en PHP c'est plus tot ça )

    mais je pense qu'un simple scipt qui me stocke mon CSV dans un tableau TSV et que je traite ensuite devrait suffire

    je te fais le script, je test et tu me dis ce que tu en pense !!

  15. #35
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    Select * FROM table_base where Line='All';
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function select_rows_all($tableau) {
      $temp = array();
      foreach($tableau as $row) {
        if ($row['Line'] == 'all') {
          $temp[] = $row;
        }
      }
      return $temp;
    }
    Après si tu veux plus générique, tu peux faire un truc dans ce genre (non testé) :
    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
    function select_rows($tableau, $criteres) {
      $temp = array();
      foreach($tableau as $row) {
        $differences = false;
        reset($criteres);
        while (!$differences && list($key,$valeur_attendue) = each($criteres)) {
          $differences = $row[$key] != $valeur_attendue;
        }
        if (!$differences) {
          $temp[] = $row;
        }
      }
      return $temp;
    }
    select_rows($mon_tableau, array('Line' => 'all', 'toto' => 'titi', ...));

  16. #36
    Membre confirmé Avatar de M@XflY
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 95
    Par défaut
    c'est vrai que SQL est plus simple

    faut dire aussi que c'est spécialisé dans le traitement de données voilà purquoi on l'utilise avec PHP, car je me vois mal faire ce genre de requette tout le temps à la place de SQL, mais bon la question n'est pas là

    bon je repart de ton srcipt de départ où tu me dit :
    "A partir de là ton fichier csv est stocké dans un tableau, une ligne pour une ligne avec la première qui stocke les entetes"

    celui là :

    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
    function parse_csv_file($file, $columnheadings = false, $delimiter = ',', $enclosure = "\"") {
     
           $row = 1;
           $rows = array();
           $handle = fopen($file, 'r');
     
           while (($data = fgetcsv($handle, 1000, $delimiter, $enclosure )) !== FALSE) {
     
               if (!($columnheadings == "false") && ($row == 1)) {
                   $headingTexts = $data;
               } elseif (!($columnheadings == "false")) {
                   foreach ($data as $key => $value) {
                       unset($data[$key]);
                       $data[$headingTexts[$key]] = $value;
                   }
                   $rows[] = $data;
               } else {
                   $rows[] = $data;
               }
               $row++;
           }
     
           fclose($handle);
           return $rows;
       }
     
    var_dump(parse_csv_file('/tmp/fichier.csv', true, ';'));
    ?>
    donc celui ci ne fait que formater le CSV en tableau php

    bon déjà une chose de faite !!

    sinon j'ai fait ce script mais ça marche pas :

    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
    30
    31
    <?php
    	/*Script name : Convertir
    	* Description : Lit un fichier CSV file et retrourne un fichier TSV. Le fichier CSV doit avoir une extension CSV */
     
    	$monfichier = "graphes.csv";
    	function convert ($nomfichier)
    	{
    		if(@$fh_in = fopen("{$nomfichier}.csv","r"))
    		{
    		$fh_out = fopen("{$nomfichier}.tsv","a");
    		while (!feof(($fh_in))
    			{
    			$ligne = fgetcsv ($fh_in,1024);
    			if($ligne[0] == "")
    				{
    				fwrite($fh_out,"\n");
    				}
    			else {
    				fwrite($fh_out,implode($ligne,"\t),"\n);
    				 }
    			}
    			fclose($fh_in);
    			fclose($fh_out);
    		}
    		else {
    			echo "Ce fichier n'exite pas\n";
    			return TRUE;
    			 }
    		convert ($monfichier);
    	}
    ?>

    par contre j'aurai voulu qu'il s'affiche ce tableau histoire que je vérifie qu'il est juste

    alors faut que je retrouve cette foutus fonction ..................
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var_dump('<pre>', $data, '</pre>');
    tu me l'avais mise c'est vrai

    je m'y retrouvai plus tout à l'heure dans tout ces codes maintenant ça va un peu mieux

    là ça marche il me retourne ça :

    array(6694) { [0]=> array(25) { [0]=> string(10) "Period end" [1]=> string(8) "Duration" [2]=> string(6) "Sample" [3]=> string(6) "Corner" [4]=> string(4) "Line" [5]=> string(27) "Nb de Create PDP Roaming In" [6]=> string(32) "Nb de Create PDP Roaming In Fail" [7]=> string(32) "Ratio Create PDP Roaming In Fail" [8]=> string(32) "Nb de Crea PDP Roaming IN GTP V0" [9]=> string(19) "Nb T-PDU Roaming In" [10]=> string(22) "Nb T-PDU Roaming In UL" [11]=> string(22) "Nb T-PDU Roaming In DL" [12]=> string(28) "Ratio T-PDU Roaming In UL/DL" [13]=> string(23) "Length Roaming In T-PDU" [14]=> string(26) "Length T-PDU Roaming In UL" [15]=> string(26) "Length T-PDU Roaming In DL" [16]=> string(32) "Nb Creat PDP Imsi Non Identifiés" [17]=> string(31) "Nb de T-PDU Imsi Non Identifiés" [18]=> string(32) "Length T-PDU Imsi Non Identifiés" [19]=> string(9) "DR Status" [20]=> string(13) "DR Status Nok" [21]=> string(19) "Ratio DR Status Nok" [22]=> string(12) "DR Status CP" [23]=> string(16) "DR Status CP Nok" [24]=> string(22) "Ratio DR Status CP Nok" } [1]=> array(25) { [0]=> string(16) "13/11/2006 00:00" [1]=> string(3) "900" [2]=> string(1) "1" [3]=> string(1) "-" [4]=> string(3) "all" [5]=> string(3) "684" [6]=> string(3) "224" [7]=> string(5) "32,74" [8]=> string(2) "44" [9]=> string(6) "202141" [10]=> string(5) "91734" [11]=> string(6) "110407" [12]=> string(5) "83,08" [13]=> string(8) "76013478" [14]=> string(8) "16343861" [15]=> string(8) "59669617" [16]=> string(3) "137" [17]=> string(6) "890419" [18]=> string(9)

    donc c'est bon

    je pige pas d'ailleurs pourquoi ce scriopt ne fonctionne que maintenant
    avais dus oublier un truc
    faut que j'arrete le wisky dans le café

    bon maintenant on passe au traitement
    au filtrage d'abord :

  17. #37
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Attention, il y a un bug dans la fonction parse_csv_file. Regarde la fin de mon message #33

  18. #38
    Membre confirmé Avatar de M@XflY
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 95
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(6693) { [0]=>  array(25) { ["Period end"]=>  string(16) "13/11/2006 00:00" ["Duration"]=>  string(3) "900" ["Sample"]=>  string(1) "1" ["Corner"]=>  string(1) "-" ["Line"]=>  string(3) "all" ["Nb de Create PDP Roaming In"]=>  string(3) "684" ["Nb de Create PDP Roaming In Fail"]=>  string(3) "224" ["Ratio Create PDP Roaming In Fail"]=>  string(5) "32,74" ["Nb de Crea PDP Roaming IN GTP V0"]=>  string(2) "44" ["Nb T-PDU Roaming In"]=>  string(6) "202141" ["Nb T-PDU Roaming In UL"]=>  string(5) "91734" ["Nb T-PDU Roaming In DL"]=>  string(6) "110407" ["Ratio T-PDU Roaming In UL/DL"]=>  string(5) "83,08" ["Length Roaming In T-PDU"]=>  string(8) "76013478" ["Length T-PDU Roaming In UL"]=>  string(8) "16343861" ["Length T-PDU Roaming In DL"]=>  string(8) "59669617" ["Nb Creat PDP Imsi Non Identifiés"]=>  string(3) "137" ["Nb de T-PDU Imsi Non Identifiés"]=>  string(6) "890419" ["Length T-PDU Imsi Non Identifiés"]=>  string(9) "287195441" ["DR Status"]=>  string(7) "1093381"
    effectivement ça renvoie un truc plus cohérent

    par contre je trouve toujours pas l'erreur dans mon dernier script du post #35 !!

    J'ai l'impression qu'il me filtre pas les données car quand je lui dis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function select_rows_all($tableau) {  $temp = array(); foreach($tableau as $row) {  if ($row['Line'] == 'all') {  $temp[] = $row; }  }  return $temp; }
    elle me renvoie toujours des serveurs que je veut pas dans la colonne Line :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    " ["Line"]=>  string(13) "Cha3GgsnNok03"
    .... je débuugge on va voir ce que ça donne

  19. #39
    Membre confirmé Avatar de M@XflY
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 95
    Par défaut
    d'apres ce que j'ai compris

    j'ai l'impression que quand tu applique un filtre sur un tableau il effectue le traitement en créant un nouveau tableau correspondant au filtre demandé

    il fait pas comme Excel avec ces filtres auto qui n'effectue qu'un traitement sur le meme tableau

    donc en fait faut que je décompose comme ça :

    _ 1) selectionne uniquement les valeurs correspondant au serveur demandé (exemple : all )
    _ 2) affiche le résultat dans un nouveau tableau

    arrete moi si je me trompe !!

  20. #40
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    ben c'est à toi de dire ce que tu veux.
    Si tu veux supprimer des lignes d'un tableau qui ne te plaisent pas, alors il faut utiliser unset, et passer le tableau par référence si tu es en php4 (en php5... je sais pas).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function clean_rows(&$tableau) { 
       foreach($tableau as $key => $row) { 
          if ($row['Line'] != 'all') { 
             unset($tableau[$row]);
          }
       }
    }
     
    //mon_tableau contient tout, des lignes all et des lignes sans all
    clean_rows($mon_tableau);
    //mon_tableau contient seulement les lignes all
    Sinon si tu veux pas modifier ton tableau =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function select_rows_all($tableau) {
      ... //Cf posts précédents
    }
    $mon_tableau_avec_que_des_all = select_rows_all($mon_tableau);

Discussions similaires

  1. Graph avec plusieurs courbes - GD
    Par vargasvan dans le forum Modules
    Réponses: 4
    Dernier message: 11/05/2006, 13h47
  2. Mysql & mrtg : faire un graphe avec le contenu d'une tab
    Par fouhaa dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 12/08/2005, 12h38
  3. Graphe avec java
    Par alamihamza dans le forum 2D
    Réponses: 3
    Dernier message: 07/03/2005, 17h14
  4. [NetBeans] graphe avec netBeans :?:
    Par sofien dans le forum NetBeans
    Réponses: 1
    Dernier message: 28/02/2005, 19h54
  5. Affichage graphe avec DBChart
    Par grominetos dans le forum Bases de données
    Réponses: 2
    Dernier message: 21/06/2004, 19h17

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