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

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : avril 2014
    Messages : 29
    Points : 34
    Points
    34

    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
    Rédacteur/Modérateur
    Avatar de jreaux62
    Homme Profil pro
    Webdesigner
    Inscrit en
    août 2008
    Messages
    14 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Arts - Culture

    Informations forums :
    Inscription : août 2008
    Messages : 14 511
    Points : 29 378
    Points
    29 378

    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 );
    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Pose ta question, tu seras idiot une seconde. Ne la pose pas, tu seras idiot toute ta vie."
    Albert Einstein (1879-1955).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : avril 2014
    Messages : 29
    Points : 34
    Points
    34

    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. Afficher le contenu d'une page HTML via du PHP
    Par loic20h28 dans le forum PHP & MySQL
    Réponses: 1
    Dernier message: 02/01/2012, 13h34
  2. php dans tableau html ou tableau php ?
    Par enrico83600 dans le forum Langage
    Réponses: 3
    Dernier message: 18/09/2009, 21h50
  3. Tri dans tableau html via liste déroulante
    Par guispider dans le forum Syntaxe
    Réponses: 7
    Dernier message: 18/02/2009, 17h31
  4. envoi mail en html via formulaire php
    Par flambyture dans le forum Formulaires
    Réponses: 5
    Dernier message: 27/03/2008, 10h43
  5. Réponses: 3
    Dernier message: 30/08/2007, 08h56

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