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 :

Tableau trié


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 23
    Points : 11
    Points
    11
    Par défaut Tableau trié
    Bonjour à tous,

    J'ai un site en PHP dans le quel j'ai un tableau dont les données proviennent d'un fichier CSV.
    Dans ce tableau j'affiche une liste d'article qui doit être fabriqué. Et il est très probable qu'un même article doivent être fabriqué plusieurs fois.
    $lesColonnes[26] représente la quantité du produit.
    $lesColonnes[22] représente la référence du produit.
    Ce que je voudrais c'est rassembler les produits qui ont la même référence et faire un +1 pour la quantité.

    J'avais penser faire un truc du genre :

    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
     
    echo "<table border='1'>\n";
    $nb = 0;
    while(!feof($fp)) {
        $nb++;
        echo "<tr>";
        $j = sizeof($ligne);
        // On récupère une ligne
        $Ligne = fgets($fp,1024);
        $lesColonnes = explode(";", $Ligne);
        $lesColonnes = str_replace('"','',$lesColonnes);
        $date = date("d/m/Y");
        if ($lesColonnes[17] >= $date){
           if ($lesColonnes[22].[$nb] = $lesColonnes[22].[$nb-1]) {
              // On affiche la ligne
              echo "<td>$lesColonnes[23]</td>";
              echo "<td>$lesColonnes[22]</td>";
              echo "<td>$lesColonnes[24]</td>";
              echo "<td>$lesColonnes[25]</td>";
              echo "<td>$lesColonnes[26]</td>";
              echo "<td>$lesColonnes[17]</td>";
              echo "</tr>";
           }
        }
    }
    echo "</table>\n";


    Ligne 2 et 13 c'est ce que j'ai rajouté mais qui ne fonctionne pas biensur. Donc si vous avez une petite idée je suis preneuse. Merci.

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Personnellement, je ferais deux boucles : une qui récupère les infos du csv (surtout si tu n'as pas réellement besoin de toutes les colonnes) et fait le comptage et une seconde qui se charge de l'affichage.
    Au passage, il existe une fonction fgetcsv qui lit très bien les lignes d'un csv toute seule, sans qu'on est besoin de se prendre la tête avec les fread et autres implode
    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
    $resultats = array();
    while(!feof($fp)) {
      // On récupère une ligne
      $colonnes = fgetcsv($fp, 1024, ';');
      $date = date("d/m/Y");
      if ($colonnes[17] >= $date)
      {
        // on indexe les résultats sur la reference
        if (isset($resultats[$colonnes[22]]))
        {
          //si le produit est déjà référencé on ajoute la quantité à la quantité existante
          $resultats[$colonnes[22]]['quantite'] += $colonnes[26];
        }
        else
        {
          //sinon on crée la ligne pour le produit
          $resultats[$colonnes[22]] = array('reference' => $colonnes[22], 'nom' => $colonnes[23], 'quantite' => $colonnes[26]);
        }
      }
    }
     
    //on affiche les résultats
    echo '<table>';
    echo '<tr><th>Nom</th><th>Référence</th><th>Quantité</th>';
    foreach ($resultats as $ligne)
    {
      echo '<tr>'
        .'<td>'.$ligne['nom'].'</td>'
        .'<td>'.$ligne['reference'].'</td>'
        .'<td>'.$ligne['quantite'].'</td>'
        .'</tr>';
    }
    echo '</table>';
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    T'as réponse est presque parfaite. Tout fonctionne sauf une chose.
    Si j'ai un même produit qui doit être fabriqué une fois pour une date et une autre fois pour une autre date il me les rassemble quand même. Et moi ce que je voudrais c'est que les produits soient aussi distinct selon la date à laquelle ils doivent être fabriqué.

Discussions similaires

  1. [Tableaux] Affichage valeur d'un tableau trié
    Par kcizth dans le forum Langage
    Réponses: 1
    Dernier message: 05/01/2006, 15h47
  2. Réponses: 6
    Dernier message: 05/01/2006, 14h23
  3. tableau trié
    Par devdébuto dans le forum C
    Réponses: 3
    Dernier message: 07/11/2005, 18h00
  4. [Tableau][TRI] Tri d'un String[]
    Par zakir dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 17/03/2005, 17h31
  5. URGENt: recherche dans un tableau trié par ordre alphabetiqu
    Par JulPop dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/02/2005, 17h21

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