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 :

Création d'un tableau html à partir d'un array


Sujet :

Langage PHP

  1. #1
    En attente de confirmation mail
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Création d'un tableau html à partir d'un array
    Bonjour,

    Dans le cadre d'une application web que je dois faire et qui consiste à informatiser un travail qui à la base est fait sur papier, je cherche à générer à l'aide de php un tableau html mais il me manque une étape que je n'arrive pas à résoudre et j'aurai besoin de votre aide. Alors voila, je pars d'un formulaire qui permet de rentrer les heures d'ouvriers et de les enregistrer. J'enregistre les heures individuellement même si il doit y avoir plusieurs entrées dans la bdd qui possèdent le même jour. Ainsi je peux faire des calculs dessus en faisant des totaux etc… Puis à la récupération un petit script me permet d'avoir les heures sous forme d'array où la clé contient la date et la valeur : un array avec les heures effectuées comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    $heures = array( '2013/07/01' => array( 'chantier'  => 6.5,
            'chantier' => 0.5 ),
        '2013/07/02' => array( 'vacances' => 7.0 ),
        'etc…' => … 
    );
    Mon but, c'est de convertir ce tableau en un autre array qui ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php 
    $heures = array(0 => array('1', '2', '3', '4', '5'),
    	1 => array('7.0', '3.5', '6.5','', '2.0'),
    	2 => array('', '3.5', '', '', '4.0'),
    	'maladie' => array('', '', '', '', ''),
    	'atelier' => array('', '', '0.5', '', '6.0'),
    	'vacances' => array('', '', '', '7.0', '')
    );
    La clé 0 représente les jours du mois (de 0 à 29 ou 31), les prochaines clés (ci-dessus la 1 et 2) représentent les heures de chantier puis vient les dernières clés qui sont des strings et qui représente les types d'heures.

    Petite explication sur le tableau, si il y a plusieurs clés numériques pour les chantiers c'est parce-que les ouvriers en font des différents dans la journée. Donc comme vous pouvez le voir ça s'additionne, par exemple dans le tableau de la clé 1 (toujours dans l'array ci-dessus) on peut voir qu'en 2ème position (qui est en 2ème position parce-que l'ouvrier a fait ces heures le 02 du mois aussi représenté dans la clé 0) il n'y a que 3.5 heures et que dans la clé 2 il y a à la même position de nouveau 3.5 heures donc 7 heures mais il a fait 2 chantiers différents.

    C'est ainsi que fonctionne le tableau, et c'est grace à cet array que je peux convertir les key et les valeurs en cellules html. Mais... Impossible de trouver comment faire pour passer du premier array au deuxième qui est exploitable pour la conversion en tableau, j'ai déjà penser passer par une boucle qui tournera autant de fois que les jours du mois mais après comment séparer les valeurs d'un array (exemple array 1) pour les réinsérer en plusieurs niveaux dans un autre array. C'est un véritable casse - tête et je commence à perdre le fil.

    J'ai cette contrainte de devoir fournir le même tableau qui est actuellement sur papier et remplit à la main.

    Pouvez vous m'aider à trouver une méthode pour arriver à mon but ? Une explication, des idées, des fonctions… tout !... Je prend ce qu'il vient. Si jamais vous avez besoin de plus de précision, n'hésitez pas.

    Je vous remercie d'avance.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    J'ai peur que tu partes sur une mauvaise voie : il n'est (à priori) pas nécessaire pour construire un tableau HTML de prépare un tableau PHP collant cellule par cellule.

    Indique nous ce que tu recupères de ta requête et quelle présentation tu veux.
    On doit pouvoir trouver une solution avec le moins de manipulations possible.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    En attente de confirmation mail
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Excusez-moi du temps de réponse. Merci de m'avoir répondu

    Ma requête me renvoie un array composé d'objet qui représente les heures. Donc pour les afficher j'utilise cette méthodologie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
         foreach( $mesHeures as $heure )
         { 
                echo $heure->type; //par exemple 
                echo $heure->id_employe;
         }
    Voici la structure de la table :

    id | id_employe | type | nombre | date

    et enfin voici un tableau d'exemple qui représente le résultat final que je souhaiterais généré :



    Les lignes du haut (celles qui ne sont pas désigné à gauche comparé à ceux du bas [atelier, vacances...]) représentent les heures de chantier et il y a autant de colonnes (+1) que de jours dans le mois (donc il peut y en avoir 28, 30, 31…). Le tableau est normalement fait à la main, l'employé se chargeant de faire cela a un modèle qu'il imprime. Ce que je trouve difficile c'est le fait qu'il peut y avoir des cellules vides, si dans la colonne de gauche l'ouvrier a fait 3 chantiers et celle de droite que 2 alors cette même colonne aura quand même 3 cases utilisées mais la dernière sera vide.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    "type" ca correspond aux cas de la colonne de gauche (chantier+événements) ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    En attente de confirmation mail
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Oui c'est ça, sachant que le type 'chantier' ne s'affiche pas juste les évènements

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je te propose le principe suivant :
    - on récupére les données dans la base et on les range dans un tableau PHP
    - on construit le calendrier on parcourant les jours ; pour chaque jour on regarde s'il y a une donnée correspondant.

    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
    61
    62
    63
    64
     
     
    $mois = date('m');
     
    // on recupère les types :
    $sql  = 'SELECT DISTINCT `type` FROM ta_table
    WHERE MONTH(`date`) = ' . $mois;
    $sth = $cnx->query($sql);
    while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
    	$tblTypes[] = $row['type'];
    }
     
    // on recupère les données et on les range pas type et par date :
    $sql  = 'SELECT `type`, `nombre`, `date` FROM ta_table
    WHERE id_employe = xxxxx
    AND MONTH(`date`) = ' . $mois;
    $sth = $cnx->query($sql);
    while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
    	$tblData[$row['type']][$row['date']] = $row['nombre']
    }
     
    // on affiche le calendrier : 
    $lastday = new datetime('last day of this month');
    echo '<table border="1">';
     
    // ligne de titre :
    echo '<tr>
    		<th>&nbsp;</th>';
    for ($date = new datetime('first day of this month'); $date <= $lastday; $date->modify('+1 day')) {
    	echo '<th>' . $date->format('d/m') . '</th>';
    	// on prépare un tableau pour le total par jour
    	$jour = $date->format('Y-m-d');
    	$tblTotal[$jour] = 0;
    }
    echo '</tr>';
     
    // lignes de types :
    foreach ($tblType as $type) {
    	echo '<tr>
    			<td>' . $type . '</td>';
    	for ($date = new datetime('first day of this month'); $date <= $lastday; $date->modify('+1 day')) {
    		$jour = $date->format('Y-m-d');
    		if (isset($tblData[$type][$jour])) {
    			$contenu = $tblData[$type][$jour];
    			$tblTotal[$jour] += $tblData[$type][$jour];
    		}
    		else {
    			$contenu = '&nbsp;';
    		}
     
    		echo '<td>' . $contenu . '</td>';
    	}
    	echo '</tr>';
    }
     
    // ligne de total
    echo '<tr>
    		<th>Total</th>';
    for ($date = new datetime('first day of this month'); $date <= $lastday; $date->modify('+1 day')) {
    	$jour = $date->format('Y-m-d');
    	echo '<td>' . $tblTotal[$jour] . '</td>';
    }
    echo '</tr>
    </table>';
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. Créer un tableau html à partir d'une requête sql
    Par biba35 dans le forum Langage
    Réponses: 5
    Dernier message: 05/02/2009, 09h14
  2. Créer un tableau html à partir d'une requête sql
    Par biba35 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 04/02/2009, 10h17
  3. Création d'une page html à partir d'un prog en C
    Par Adrilo dans le forum Bibliothèque standard
    Réponses: 3
    Dernier message: 22/01/2009, 17h36
  4. Réponses: 5
    Dernier message: 08/01/2009, 09h05
  5. Création d'un tableau a partir d'un autre
    Par ChrisMaire dans le forum ASP
    Réponses: 0
    Dernier message: 26/08/2008, 20h37

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