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

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

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    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 émérite
    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
    Points : 2 446
    Points
    2 446
    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] ;
       }
     }
    }
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

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

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    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 émérite
    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
    Points : 2 446
    Points
    2 446
    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..
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  5. #5
    Membre émérite
    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
    Points : 2 446
    Points
    2 446
    Par défaut
    [5.50] => 6.26
    je sais pas d'ou tu l'as ce 6.26
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

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

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    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.

  7. #7
    Membre émérite
    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
    Points : 2 446
    Points
    2 446
    Par défaut
    perso j'aime pas

    if($new[key($value)][$tmp[0]] != "")

    utilise isset() à la place.
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

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

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    ...En tout cas, moi, j'ai bien aimé ton aide !
    Je te remercie beaucoup et te souhaite une bonne fin de journée.


  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par gene69 Voir le message
    perso j'aime pas

    if($new[key($value)][$tmp[0]] != "")

    utilise isset() à la place.
    !empty plutôt

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/03/2009, 18h05
  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, 16h26
  3. Réponses: 20
    Dernier message: 02/02/2008, 23h14
  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, 13h10
  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, 14h05

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