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 HTML via tableau PHP


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2014
    Messages : 31
    Points : 36
    Points
    36
    Par défaut Tableau HTML via tableau PHP
    Bonjour,

    Depuis plusieurs heures je suis sur un problème de récupération de données d'un tableau PHP pour créer un tableau HTML en fonction de ces données.

    Voici mon tableau PHP :

    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
    Array
    (
        [1 à 49] => Array
            (
                [6.000] => Array
                    (
                        [0] => 10 ans
                        [1] => 12 ans
                        [2] => 16 ans
                    )
     
                [5.000] => Array
                    (
                        [0] => 6 ans
                        [1] => 8 ans
                    )
     
            )
     
        [50 à 99] => Array
            (
                [5.980] => Array
                    (
                        [0] => 12 ans
                        [1] => 16 ans
                    )
     
                [4.980] => Array
                    (
                        [0] => 6 ans
                        [1] => 8 ans
                        [2] => 10 ans
                    )
     
            )
     
    )
    Et voici le résultat souhaité :

    Tailles 1 à 49 50 à 99
    12 ans
    16 ans
    6.00 € 5.98 €
    6 ans
    8 ans
    5.00 € 4.98 €
    10 ans 6.00 € 4.98 €

    Comme vous pouvez le voir, le 10 ans est tout seul car pour le premier palier de quantité il est avec les 12 et 16 ans mais pour le deuxième palier (50 à 99) il est au même prix que les 6/8 ans.
    C'est pour ça que je le met seul car il à un "groupe" de prix unique.
    Les 12/16 ans sont toujours ensemble, de même pour les 6/8 ans.

    J'ai beau chercher dans tous les sens, impossible de créer ce tableau html via des foreach etc...

    Pourriez-vous m'aider svp ?

    Je vous remercie

  2. #2
    Membre habitué Avatar de daniel61
    Inscrit en
    Décembre 2006
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 139
    Points : 169
    Points
    169
    Par défaut
    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
    <style>
    	table {
    		border-collapse: collapse;
    		margin-bottom: 0;
    		width: 500px;
    		text-align: left;
    		font-family: Verdana, Arial, Tahoma, Calibri, Geneva, sans-serif;
    		font-size: 13px;
    	}
    	tr {vertical-align: top;}
    	td {
    		border: 3px solid #999999;
    		padding: 0.5em;
    		margin: 0;
    	}
    </style>
    <?php
    // Les données.
    $original = [
    	"1 à 49" => [
    		"6.000" => ["10 ans", "12 ans", "16 ans"], 
    		"5.000" => ["6 ans", "8 ans"],
    	],
    	"50 à 99" => [
    		"5.980" => ["12 ans", "16 ans"],
    		"4.980" => ["6 ans", "8 ans", "10 ans"],
    	],
    	/*"extra test" => [
    		"4.950" => ["8 ans", "10 ans"],
    		"5.990" => ["6 ans", "12 ans", "16 ans"],
    	],*/
    ];
    // changer l'ordre des niveaux pour simplifier l'affichage du tableau HTML
    $transpose = [];
    foreach($original as $taille => $montants) {
    	foreach($montants as $montant => $ages) {
    		foreach($ages as $age) {
    			$transpose[$age][$taille] = $montant;
    		}
    	}
    }
    // afficher le tableau HTML en regroupant les prix identiques, le 10 ans sera sur le premier <tr> et non le dernier. Acceptable ?
    $format_prix = str_repeat('<td>%01.2f €</td>', count($original)); // au cas où il y aurait + ou - que 2 colonnes pour Tailles
    $format_entete = str_repeat('<td>%s</td>', count($original)); // idem
    vprintf("<table><tr><td>Tailles</td>$format_entete</tr>", array_keys($original));
    $ligne = $precedent = [];
    foreach($transpose as $age => $ages) {
    	$check = array_values($ages); // extraire les prix courants
    	// si les prix précédents sont différent des prix courants
    	if($check !== $precedent) {
    		// s'il y a une ligne <tr> en attente d'affichage, alors l'afficher.
    		if(!empty($ligne)) vprintf("<tr><td>%s</td>$format_prix</tr>", $ligne);
    		$ligne = array_merge([$age], $check); // construire la nouvelle ligne en attente d'affichage (regrouper âges)
    		$precedent = $check; // les prix courants deviennent les prix précédents
    	}
    	// sinon, ajouter l'âge actuel pour la case des âges (regrouper)
    	else $ligne[0] .= "<br>$age";
    }
    // il reste à afficher la dernière ligne <tr> en attente et fermer </table>, obligé sauf si $orginal peut-être vide.
    vprintf("<tr><td>%s</td>$format_prix</tr></table>", $ligne);

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    @daniel61

    On peut trier par ages (croissant) avec array_multisort() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array_multisort( $transpose, SORT_ASC );

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2014
    Messages : 31
    Points : 36
    Points
    36
    Par défaut
    Merci beaucoup c'est exactement ce que je cherchais ^^
    C'est là que je vois que j'ai vraiment des lacunes ... merci !

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

Discussions similaires

  1. [MySQL] Afficher le contenu d'une page HTML via du PHP
    Par loic20h28 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 02/01/2012, 14h34
  2. php dans tableau html ou tableau php ?
    Par enrico83600 dans le forum Langage
    Réponses: 3
    Dernier message: 18/09/2009, 22h50
  3. Tri dans tableau html via liste déroulante
    Par guispider dans le forum Langage
    Réponses: 7
    Dernier message: 18/02/2009, 18h31
  4. envoi mail en html via formulaire php
    Par flambyture dans le forum Langage
    Réponses: 5
    Dernier message: 27/03/2008, 11h43
  5. Réponses: 3
    Dernier message: 30/08/2007, 09h56

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