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 :

Petit casse-tête pour les amateurs de tableaux [PHP 5.2]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut Petit casse-tête pour les amateurs de tableaux
    Bonjour à tous,

    Décidément, les tableaux, c'est pas mon truc...

    Soit 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
    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
     
    Array
    (
        [0] => Array
            (
                [423] => Array
                    (
                        [0] => 19.60
                        [1] => 48.18
                    )
     
            )
     
        [1] => Array
            (
                [423] => Array
                    (
                        [0] => 5.50
                        [1] => 4.94
                    )
     
            )
     
        [2] => Array
            (
                [423] => Array
                    (
                        [0] => 5.50
                        [1] => 1.32
                    )
     
            )
     
        [3] => Array
            (
                [424] => Array
                    (
                        [0] => 19.60
                        [1] => 4.92
                    )
     
            )
     
        [4] => Array
            (
                [424] => Array
                    (
                        [0] => 5.50
                        [1] => 1.88
                    )
     
            )
    )
    Comment le réduire à :

    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
     
    Array (
     
          [423]=>Array(
                [19.60] => 48.18
                [5.50]  =>  6.26
     
           )
          [424]=>Array(
    	    [19.60] => 4.92
                [5.50]  => 1.88
     
           )
     
    )
    Vous l'aurez compris : les clés 423, 424 sont des N° de commande et les clés 19.60 et 5.50 sont des taux de TVA dont les valeurs sont les montants correspondants.
    Je voudrais regrouper, par clés de N° commande, les taux de TVA et le cumul de leurs valeurs.
    Je ne mets pas ici ce que j'ai essayé, des tableaux tmp et autres, le post ferait 10 km de long...
    Merci de votre coup de main.

  2. #2
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    combien de ligne? on doit pouvoir faire mieux!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    foreach( $original as $value )
    {
     if ( is_array($value) )
     {
       $tmp = current($value);
       if ( is_array( $tmp )
       {
         $new[key($value)][$tmp[0]]= $tmp[1] ;
       }
     }
    }

  3. #3
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    Bonjour,

    Merci de répondre à mon post.
    Combien de ligne ? je l'ignore ! Le tableau de base et issu de plusieurs requêtes SQL jointes et les valeurs sont calculées dans une boucle. Il n'y a, au maximum, que 2 taux de TVA : 5.50 et 19.60. Et ce sont les cumuls de montants par taux et par commande dont j'ai besoin...

    Je ne sais pas si je suis très clair...

  4. #4
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    j'ai modifié le code proposé plusieurs fois.
    "combien de ligne" c'était parce que quelqu'un peu avoir une idée plus performante.
    fait voir le SQL, je suis sur que c'est plus facile à faire en SQL..

  5. #5
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    [5.50] => 6.26
    je sais pas d'ou tu l'as ce 6.26

  6. #6
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    Je sais pas d'ou tu l'as ce 6.26
    C'est le cumul montants du taux 5.50 pour la commande 423.

    Mais, grâce à ton bout de code, je pense avoir trouvé la soluce. Les résultats me paraissent bons. Je mettrai "Résolu" quand j'aurai mieux vérifié :

    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
     
    $new = array();
    foreach( $tab as $value )
    {
     if ( is_array($value) )
     {
       $tmp = current($value);
      if ( is_array( $tmp ))
      {
        if($new[key($value)][$tmp[0]] != ""){
    	$new[key($value)][$tmp[0]] += $tmp[1] ;
    	}else{
    	$new[key($value)][$tmp[0]] = $tmp[1] ;
    	}  
      }
     }
    }
    Me sort bien les cumuls de montants par taux et par commande.
    Déjà, un grand grand merci à toi !
    Vais essayer aussi de décortiquer ce code pour bien le comprendre.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/03/2009, 17h05
  2. Un petit problème de DELETE casse tête pour débutant
    Par abzal dans le forum Langage SQL
    Réponses: 4
    Dernier message: 03/07/2008, 15h26
  3. Réponses: 20
    Dernier message: 02/02/2008, 22h14
  4. [XSL~FO] pour les amateurs de casse tête.
    Par lilian300703 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 14/12/2007, 12h10
  5. casse-tête sur les adresses (classe C et A)
    Par HuZimA dans le forum Protocoles
    Réponses: 7
    Dernier message: 27/07/2006, 13h05

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