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 :

Comment imbriquer deux boucles for ?


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    retraité bidouilleur informatique
    Inscrit en
    Février 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : retraité bidouilleur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 75
    Points : 55
    Points
    55
    Par défaut Comment imbriquer deux boucles for ?
    bonjour à tous,

    Je viens vous car je patine...
    Voici le code :
    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
    <meta charset="utf-8">
    <title>essai</title>
    <link href="tab_jours.css" rel="stylesheet" type="text/css">
    </head>
     
    <body>
    <div>	
    <table>
    	<tr>
    	   <th> N° semaine</th>
    	   <th> Lundi</th>
    	   <th> Mercredi</th>
    	</tr>
    	<tr>
    	      <td> 
    	      <?php
    			 // affiche le chiffre des 52 semaines  
    	         for ($i = 1; $i <= 52; $i++) {
                 echo $i . "<br />";
                 }
    	      ?>
    	     </td>
    		<td><?php
    			 // affiche tous les lundis de l'année
    			  for( $i = 1; $i <= 365; $i++ ) {  
                  if (date("l", mktime(0, 0, 0, 1, $i, 2018)) == 'Monday')   
                  echo date("l d/m/Y", mktime(0, 0, 0, 1, $i, 2018)) . "<br />";  
                  }  
    		 ?></td>
    		<td>
    		<?php
    			 // affiche tous les mercredis de l'année
    		     for( $i = 1; $i <= 365; $i++ ) {  
                  if (date("D", mktime(0, 0, 0, 1, $i, 2018)) == 'Wed')  
                  echo date("l d/m/Y", mktime(0, 0, 0, 1, $i, 2018)) . "<br />";  
                  }  
    		?>
    		 </td>
    	</tr>
     
    </table>
    <?php
    	//calcul du numéro de la semaine par rapport à une date
    $date_test = "2018-05-14";
    $good_format=strtotime ($date_test);
    echo date('W',$good_format);
    echo '<br>';
    ?>	
     
    </div>
    </body>
    </html>
    Le code fonctionne mais j'essai d'imbriquer les lundis et le n° de la semaine
    exemple: lundi 07/05/2018 semaine 19
    Pour les mercredis je n'aurai plus qu'à faire un copier coller.

    D'avance merci pour le coup de main

    @+

    Naje83

  2. #2
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    Bonjour.
    Tu peux nous dire le tableau HTML que tu veux obtenir ?
    Et celui que tu obtiens ?

  3. #3
    Membre du Club
    Homme Profil pro
    retraité bidouilleur informatique
    Inscrit en
    Février 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : retraité bidouilleur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 75
    Points : 55
    Points
    55
    Par défaut
    Merci pour la réponse

    J'obtiens un tableau ordinaire

    n° de semaine Lundi Mercredi
    1à 52 Monday 01/01/2018 Wednesday 03/01/2018
    etc etc

    J'aimerai obtenir
    Monday 01/01/2018 semaine x Wednesday 03/01/2018 semaine x

    Groso modo c'est cela, ensuite je pofinerai la présentation...

    @+

    Naje83

  4. #4
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    Coucou.
    Il faut profiter des objets DateTime (si tu es en PHP >= 5.3) quand on manipule des dates comme dans ta problématique :

    http://php.net/manual/fr/datetime.add.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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    <!DOCTYPE html>
    <html lang="fr">
     
    	<head>
    		<meta charset="utf-8">
    <title>Tableau de dates</title>
    <link href="tab_jours.css" rel="stylesheet" type="text/css">
    </head>
     
    <body>
    <div>	
    <?php
    if(isset($_GET['year'])){
       $year=$_GET['year'];
    }
    else{
       $year=2018;
    }
    //ce tableau correspondra (en français) au paramètre w de la fonction date
    $jours_f=array('Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi');
    $curdate_string=$year.'-01-01';
    $curdate = new DateTime($curdate_string);
    $fin=$year.'-12-31';
    if ($curdate instanceof DateTime) {
       echo '<table><caption>ANNEE '.$year.'</caption>
       <tr><th> Semaine</th><th> Lundi</th><th> Mercredi</th></tr>'."\n";
       do{
          //lundi => on ouvre la semaine
          if($curdate->format('w')==1){
             echo '<tr><td>Semaine '.$curdate->format('W').'</td><td>'.$jours_f[1].' '.$curdate->format('d/m/Y').'</td>';
             //l'année se termine sans mercredi ?
             if($curdate->format('d/m')=='30/12' || $curdate->format('d/m')=='31/12'){
                echo '<td></td></tr>'."\n";
             }
          }
          //mercredi => on ferme la semaine
          elseif($curdate->format('w')==3){
             //l'année commence sur un mercredi ?
             if($curdate->format('d/m')=='01/01' || $curdate->format('d/m')=='02/01'){
                echo '<tr><td>Semaine '.$curdate->format('W').'</td><td></td>';
             }
             echo '<td>'.$jours_f[3].' '.$curdate->format('d/m/Y').'</td></tr>'."\n";
          }
          //ici, on passe au jour suivant (P1D = plus 1 day)
          $curdate->add(new DateInterval('P1D'));
       }while($curdate->format('Y-m-d') <= $fin);
       echo '</table>';
    }
    else{
       echo 'Pourquoi faire le pitre avec la barre d\'adresse hein dis, c\'est mal !';
    }
    ?>
    </div>
    </body>
    </html>
    Si tu ajoutes "year=2019" dans la barre d'adresse, tu produis cet HTML :
    Le diable est dans les détails : les années qui commencent par un mercredi, ou qui se terminent sans mercredi, il faut que ton HTML reste propre.

    Code HTML : 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
    <table border="1"><caption>ANNEE 2019</caption>
    <tr><th> Semaine</th><th> Lundi</th><th> Mercredi</th></tr>
    <tr><td>Semaine 01</td><td></td><td>Mercredi 02/01/2019</td></tr>
    <tr><td>Semaine 02</td><td>Lundi 07/01/2019</td><td>Mercredi 09/01/2019</td></tr>
    <tr><td>Semaine 03</td><td>Lundi 14/01/2019</td><td>Mercredi 16/01/2019</td></tr>
    <tr><td>Semaine 04</td><td>Lundi 21/01/2019</td><td>Mercredi 23/01/2019</td></tr>
    <tr><td>Semaine 05</td><td>Lundi 28/01/2019</td><td>Mercredi 30/01/2019</td></tr>
    <tr><td>Semaine 06</td><td>Lundi 04/02/2019</td><td>Mercredi 06/02/2019</td></tr>
    <tr><td>Semaine 07</td><td>Lundi 11/02/2019</td><td>Mercredi 13/02/2019</td></tr>
    <tr><td>Semaine 08</td><td>Lundi 18/02/2019</td><td>Mercredi 20/02/2019</td></tr>
    <tr><td>Semaine 09</td><td>Lundi 25/02/2019</td><td>Mercredi 27/02/2019</td></tr>
    <tr><td>Semaine 10</td><td>Lundi 04/03/2019</td><td>Mercredi 06/03/2019</td></tr>
    <tr><td>Semaine 11</td><td>Lundi 11/03/2019</td><td>Mercredi 13/03/2019</td></tr>
    <tr><td>Semaine 12</td><td>Lundi 18/03/2019</td><td>Mercredi 20/03/2019</td></tr>
    <tr><td>Semaine 13</td><td>Lundi 25/03/2019</td><td>Mercredi 27/03/2019</td></tr>
    <tr><td>Semaine 14</td><td>Lundi 01/04/2019</td><td>Mercredi 03/04/2019</td></tr>
    <tr><td>Semaine 15</td><td>Lundi 08/04/2019</td><td>Mercredi 10/04/2019</td></tr>
    <tr><td>Semaine 16</td><td>Lundi 15/04/2019</td><td>Mercredi 17/04/2019</td></tr>
    <tr><td>Semaine 17</td><td>Lundi 22/04/2019</td><td>Mercredi 24/04/2019</td></tr>
    <tr><td>Semaine 18</td><td>Lundi 29/04/2019</td><td>Mercredi 01/05/2019</td></tr>
    <tr><td>Semaine 19</td><td>Lundi 06/05/2019</td><td>Mercredi 08/05/2019</td></tr>
    <tr><td>Semaine 20</td><td>Lundi 13/05/2019</td><td>Mercredi 15/05/2019</td></tr>
    <tr><td>Semaine 21</td><td>Lundi 20/05/2019</td><td>Mercredi 22/05/2019</td></tr>
    <tr><td>Semaine 22</td><td>Lundi 27/05/2019</td><td>Mercredi 29/05/2019</td></tr>
    <tr><td>Semaine 23</td><td>Lundi 03/06/2019</td><td>Mercredi 05/06/2019</td></tr>
    <tr><td>Semaine 24</td><td>Lundi 10/06/2019</td><td>Mercredi 12/06/2019</td></tr>
    <tr><td>Semaine 25</td><td>Lundi 17/06/2019</td><td>Mercredi 19/06/2019</td></tr>
    <tr><td>Semaine 26</td><td>Lundi 24/06/2019</td><td>Mercredi 26/06/2019</td></tr>
    <tr><td>Semaine 27</td><td>Lundi 01/07/2019</td><td>Mercredi 03/07/2019</td></tr>
    <tr><td>Semaine 28</td><td>Lundi 08/07/2019</td><td>Mercredi 10/07/2019</td></tr>
    <tr><td>Semaine 29</td><td>Lundi 15/07/2019</td><td>Mercredi 17/07/2019</td></tr>
    <tr><td>Semaine 30</td><td>Lundi 22/07/2019</td><td>Mercredi 24/07/2019</td></tr>
    <tr><td>Semaine 31</td><td>Lundi 29/07/2019</td><td>Mercredi 31/07/2019</td></tr>
    <tr><td>Semaine 32</td><td>Lundi 05/08/2019</td><td>Mercredi 07/08/2019</td></tr>
    <tr><td>Semaine 33</td><td>Lundi 12/08/2019</td><td>Mercredi 14/08/2019</td></tr>
    <tr><td>Semaine 34</td><td>Lundi 19/08/2019</td><td>Mercredi 21/08/2019</td></tr>
    <tr><td>Semaine 35</td><td>Lundi 26/08/2019</td><td>Mercredi 28/08/2019</td></tr>
    <tr><td>Semaine 36</td><td>Lundi 02/09/2019</td><td>Mercredi 04/09/2019</td></tr>
    <tr><td>Semaine 37</td><td>Lundi 09/09/2019</td><td>Mercredi 11/09/2019</td></tr>
    <tr><td>Semaine 38</td><td>Lundi 16/09/2019</td><td>Mercredi 18/09/2019</td></tr>
    <tr><td>Semaine 39</td><td>Lundi 23/09/2019</td><td>Mercredi 25/09/2019</td></tr>
    <tr><td>Semaine 40</td><td>Lundi 30/09/2019</td><td>Mercredi 02/10/2019</td></tr>
    <tr><td>Semaine 41</td><td>Lundi 07/10/2019</td><td>Mercredi 09/10/2019</td></tr>
    <tr><td>Semaine 42</td><td>Lundi 14/10/2019</td><td>Mercredi 16/10/2019</td></tr>
    <tr><td>Semaine 43</td><td>Lundi 21/10/2019</td><td>Mercredi 23/10/2019</td></tr>
    <tr><td>Semaine 44</td><td>Lundi 28/10/2019</td><td>Mercredi 30/10/2019</td></tr>
    <tr><td>Semaine 45</td><td>Lundi 04/11/2019</td><td>Mercredi 06/11/2019</td></tr>
    <tr><td>Semaine 46</td><td>Lundi 11/11/2019</td><td>Mercredi 13/11/2019</td></tr>
    <tr><td>Semaine 47</td><td>Lundi 18/11/2019</td><td>Mercredi 20/11/2019</td></tr>
    <tr><td>Semaine 48</td><td>Lundi 25/11/2019</td><td>Mercredi 27/11/2019</td></tr>
    <tr><td>Semaine 49</td><td>Lundi 02/12/2019</td><td>Mercredi 04/12/2019</td></tr>
    <tr><td>Semaine 50</td><td>Lundi 09/12/2019</td><td>Mercredi 11/12/2019</td></tr>
    <tr><td>Semaine 51</td><td>Lundi 16/12/2019</td><td>Mercredi 18/12/2019</td></tr>
    <tr><td>Semaine 52</td><td>Lundi 23/12/2019</td><td>Mercredi 25/12/2019</td></tr>
    <tr><td>Semaine 01</td><td>Lundi 30/12/2019</td><td></td></tr>
    </table>


    N'hésite pas à poser des questions si je n'ai pas assez commenté mon code.

  5. #5
    Membre du Club
    Homme Profil pro
    retraité bidouilleur informatique
    Inscrit en
    Février 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : retraité bidouilleur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 75
    Points : 55
    Points
    55
    Par défaut
    Merci beaucoup, je vais tester tout ça.

    @+

    Naje83

  6. #6
    Membre du Club
    Homme Profil pro
    retraité bidouilleur informatique
    Inscrit en
    Février 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : retraité bidouilleur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 75
    Points : 55
    Points
    55
    Par défaut
    Super cela fonctionne à merveille...
    Encore merci, je vais étudier et décortiquer.

    @+

    Naje83

  7. #7
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    pour extraire ce genre de dates, PHP fournit tout ce qu'il faut pour avoir un code très lisible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // extraction de tous les lundis et mercredi de l'année avec numéro de semaine
    $date = (new DateTime())->modify("first monday of january {$year}");
    while ((int)$date->format('Y') === $year) {
        $data[$date->format('d/m/Y')] = ['semaine' => $date->format('W'), 'jour' => 'Lundi'];
        $date->modify('next wednesday');
        if ((int)$date->format('Y') === $year) {
            $data[$date->format('d/m/Y')] = ['semaine' => $date->format('W'), 'jour' => 'Mercredi'];    
        }
        $date->modify('next monday');
    }

  8. #8
    Membre du Club
    Homme Profil pro
    retraité bidouilleur informatique
    Inscrit en
    Février 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : retraité bidouilleur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 75
    Points : 55
    Points
    55
    Par défaut
    Merci rawsrc

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

Discussions similaires

  1. Sortir de deux boucles FOR-END imbriquées
    Par Nabuchodonosor15 dans le forum MATLAB
    Réponses: 5
    Dernier message: 31/08/2009, 09h58
  2. Réponses: 3
    Dernier message: 24/05/2007, 17h56
  3. Comment optimiser plusieurs boucles FOR-END imbriquées
    Par totoc1001 dans le forum MATLAB
    Réponses: 26
    Dernier message: 13/05/2007, 17h59
  4. Batch - Deux boucle For imbriquées plus un FC
    Par Lorponos dans le forum Windows
    Réponses: 17
    Dernier message: 27/07/2006, 14h58
  5. comment quitter deux boucles for?
    Par davmaster62 dans le forum Général Python
    Réponses: 2
    Dernier message: 08/03/2006, 00h16

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