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 :

Modification et amélioration boucles for


Sujet :

Langage PHP

  1. #41
    Membre du Club Avatar de RinaBK
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2021
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2021
    Messages : 92
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par pas-douée Voir le message
    Personne ne vous jamais parler de l'utilité de faire régulièrement des sauvegardes sur deux disques durs externes ? Par exemple : https://oz.fr/gestion-des-donnees-et...de-sauvegarde/
    @ RinaBK.
    Tu as totalement raison ! Le truc c’est que c’est moi qui ai fait cramer mon HD en bidouillant l’intérieur de ma tour. Comme je ne cesse de le répéter, c’est en faisant des erreurs que l’on apprend


    Citation Envoyé par pas-douée Voir le message
    En lisant les posts précédant et les bouts de code, il n'est plus nécessaire de :
    - franciser la date
    - contrôler du nombre de jours dans le mois
    J’ai malheureusement du arrêter de programmer durant environ 4 ans, en reprenant la prog, me suis vite rendue compte que tout avait grandement évoluer ! Il y a énormément de fonction que j’utilisais souvent qui sont à présent obsolète… J’ai l’impression de retourner à mes débuts, mais je te remercie pour l’info.


    Citation Envoyé par pas-douée Voir le message
    Pomper par-ci par-là des bouts de code, sans trop les comprendre, ça ne sert pas à grand chose. Il vaut mieux prendre du temps à lire des tutos initiation au PHP ou PHP pour bien débuter (il y en a en français) ou parcourir les sites références comme https://www.php.net/manual/fr/
    A mes débuts en PHP le manuel PHP n’était qu’en anglais et faire une recherche sur le net, ne donnait rien (Internet était encore à ces débuts). J’ai donc tout appris grâce à la Bible de PHP (livre version papier, édition 2002). De nos jours, il suffit de faire une recherche sur le net et l’on trouve presque tout. Mais, tu as totalement raison, c’est important de bien comprendre pour savoir ce que l’on fait. Ceci-dit, lorsque l’on débute, il n’est pas toujours aisé de faire des recherches sur le manuel PHP, du fait que l’on ne connait pas forcément quel fonction chercher pour obtenir tel ou tel résultat.

    J’ai eu exactement les mêmes réactions que toi concernant les commentaires et les couleurs. Ceci-dit, justement pour bien comprendre ce que l’on fait, il est des fois bien de laisser certains commentaires pour s’orienter, de plus concernant les couleurs, c’est en faisant des tests et des manipulations diverses que l’on apprend à comprendre les lignes de codes.

    Citation Envoyé par pas-douée Voir le message
    Pourquoi une variable $hollidays (vacances) pour des jours fériés ?
    J'ai utilisé la variable $we pour mettre en évidence les samedi et dimanche. En y ajoutant les jours fériés j'aurai dû la remplacer par $jour_chome (chomé).
    Utilises des noms de variables explicitent pour toi maintenant, c'est plus facile à comprendre pour les autres et pour toi dans quelques temps.
    Bien que jusqu’à présent, j’ai trouvé tes arguments très pertinent et justifié, là je ne suis pas tout à fait d’accord avec toi. Ce n’est pas faux, mais je pense (enfin ce n’est que mon avis) que Droïde Système7 devrait plutôt utiliser des noms de variables qui l’aide à s’orienter. Donc des noms simples et compréhensible (du moins pour lui). Rien ne lui empêche plus tard d’utiliser des noms de variable plus compréhensive pour les autres par la suite.

    Ceci-dit, il est clair que si Droïde Système7 veut bosser avec d’autres personnes sur les gros programmes, il est clair qu’il est important de s’habituer à utiliser des noms de variable plus adapté.


    Citation Envoyé par Droïde Système7 Voir le message
    Pourquoi toutes ces couleurs ?

    Hé bien là aussi : le principe et grâce à lui j'ai trouvé une méthode qui fonctionne
    Je comprends ton point de vue et je te soutiens. Ceci-dit, pas-douée a quand même raison. Si tu tiens vraiment à mettre des couleurs différentes sur chaque champ, utilise plutôt des couleurs clairs qui ne choquent pas les yeux. Cela te donnera une meilleure visualisation finale. Le problème est que tes couleurs sont tellement flashi qu’on ne voit plus que ça…

    Par exemple :
    En pastel ou en dégradé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $color = array('#A6BCFF', '#FFE6CC', '#C7C7F3', '#FFFFA4', '#A7FEBA', '#D7D7D7', '#F5B7FB', '#FDCCD5', '#CECEFF');
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $color = array('#6088FF', '#6A8FFF', '#809FFF', '#95AFFF', '#AABFFF', '#BFCFFF', '#D5DFFF', '#EAEFFF', '#FFFFFF');

    Citation Envoyé par Droïde Système7 Voir le message
    Si seulement je n'avais à me concentrer que sur un seul langage, je patinerais moins et surtout aurais plus de temps.
    Si la vie était plus simple, hin


    Citation Envoyé par Droïde Système7 Voir le message
    En attendant, tu ne m'as pas apporté le bon gâteau, mais sa cerise le surmontant, merci miammmmm, miammmmm !
    Un gâteau reste un gâteau ! Quoi que la cerise c’est pas mal aussi
    • On dit que le ridicule ne tue pas; On dit aussi que ce qui nous tue pas, nous rends plus fort; Alors pourquoi ne pas dire : Le ridicule nous rends plus fort !
    • On reproche aux gens de parler d'eux-même; C'est pourtant le sujet qu'ils traitent le mieux !

  2. #42
    Membre du Club
    Femme Profil pro
    particulier
    Inscrit en
    Juillet 2020
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : particulier

    Informations forums :
    Inscription : Juillet 2020
    Messages : 51
    Points : 59
    Points
    59
    Par défaut
    Y a plus qu'à mettre aux messages qui t'ont été utiles.

    Apprendre plusieurs langages en même temps, quelle drôle d'idée.
    Ne dit-on pas "qui trop embrasse, mal étreint" ?
    Et si tu commençais par le début : définir sur papier ton réel besoin immédiat (et non ce qu'il serait merveilleux d'avoir), écrire un algorithme, un dictionnaire des variables et des données ?
    Ensuite définir les parties côté serveur et client, et les langages php, asp, html, css, javascript, ajax, json, etc.
    Après si tu veux mettre 4 jours là où 1 te suffirait, c'est toi qui vois.

    Je n'ai pas attendu d'être en cloque pour prendre la pilule !

  3. #43
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Les filles

    Houlàààà... merci de toutes vos idées PHP.

    Oui j'aime bien me perfectionner en PHP, en JS, mais aussi d'autres langages.

    Mais dire que j'en apprends plusieurs en même temps, oui et non.

    Apprendre et se perfectionner fait deux.

    Pour les couleurs vives, oui bien entendu ce n'était que pour la démo, dans le réel m'en faut, à part le background ; trois seulement.

    Étant très pointilleux, rassurez-vous, oui en tests les nom pondus sont souvent à côté de la plaque. Souvent, devant la hâte de lancer la page, rien ne me vient d'autre à l'esprit que "toto"

    Mais dans la hâte d'observer la sentence ou non de la notice inhérente à la compil server, le test en ligne est prioritaire et souvent générateur de "ouffff" (Ou de noms d'oiseaux ça arrive aussi)

    Au plaisir, mais faut pas taper hein

    DS7

  4. #44
    Membre du Club
    Femme Profil pro
    particulier
    Inscrit en
    Juillet 2020
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : particulier

    Informations forums :
    Inscription : Juillet 2020
    Messages : 51
    Points : 59
    Points
    59
    Par défaut
    Tant qu'à gérer par des évènements comme we, jours fériés fixes, jours fériés mobiles, pourquoi ne pas intégrer le changement d'heure été/hiver-hiver/été, les phases de la lune, le changement de saison ?
    Quand un jour férié est un dimanche, quelle est la couleur prioritaire ?
    Quand 2 jours fériés tombent le même jours, gères-tu les doublons ?

    J'attends de voir le programme final.

    Merci pour les

  5. #45
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut


    Je tente déjà d'ajouter par exemple pour le 14 juillet en ligne correspondante de ce jour : 'Fête nationale' et crois-moi c'est pas gagné hein

    Et toi qui déjà me demande de décrocher la lune...

    Hier j'ai tenté d'échanger ma boucle contre le code suivant ton indication, mais que dalle...

    Faudra que je reprenne ça tranquillement à tête reposée.

    Merci de ton appui, mais ne pousse pas de trop

    DS7

  6. #46
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Mettons, si vous le voulez bien, un peu de côté les choses précédentes.

    Sur mon gâteau j'aimerais y ajouter une seconde cerise.

    Pourquoi en cet exemple le 14 juillet qui est bien détecté en bouche, se répète jusqu'en bas de mois.

    Mon code est toujours bourrin, je sais et l'assume, mais je l'aime bien

    Je suis toujours à la recherche du principe de la manip à effectuer.

    Je sais aussi que faut passer par un array, mais déjà le principe en "dur" et ensuite oui j'y passerai.

    Merci d'avance de cet autre coup de pousse/pouce (pas de matraque hein )

    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    <?php
    	ini_set("display_errors", TRUE);
    	error_reporting(E_ALL);
     
    	$num_year = date('Y'); // N° année en cours = 2021
     
    	$holidays = array(
            // 1er janvier jour de l'an
            mktime(0, 0, 0, 1, 1, $num_year), 
            // Fête du travail
            mktime(0, 0, 0, 5, 1, $num_year), 
    		// Armistice 1945
            mktime(0, 0, 0, 5, 8, $num_year), 
    		// Fête nationale
            mktime(0, 0, 0, 7, 14, $num_year), 		
    		// Toussaint
    		mktime(0, 0, 0, 11, 1, $num_year), 
    		// Armistice 1918
            mktime(0, 0, 0, 11, 11, $num_year), 
    		// Noël	
            mktime(0, 0, 0, 12, 25, $num_year), 
        );
     
    	$nom_fetes = '';
     
    	setlocale(LC_TIME, 'fr_FR.UTF-8', 'fr_FR', 'fr', 'fra_fra'); // pour avoir le nom des jours en français
     
    	$color = array('#A6BCFF', '#FFE6CC', '#C7C7F3', '#FFFFA4', '#A7FEBA', '#D7D7D7', '#F5B7FB', '#FDCCD5', '#CECEFF');
     
    	$num_mois = 07 ; // numéro du mois à afficher
    	$nb_jour  = date('j',mktime(0,0,0,$num_mois +1,0,$num_year)); // nombre de jours du mois à afficher
     
    	echo '
    	<table border=1><caption><b>'.strtoupper (strftime("%B %Y", mktime(12,0,0,$num_mois,1,$num_year))).'</b></caption>';
     
    	for ($i = 1; $i <= $nb_jour; $i++) 
    	{
    		$stamp = mktime(12, 0, 0, $num_mois, $i, $num_year);
    		$we = date('N', $stamp);  
     
     
    		$date_boucle_mois = date("d/m/Y", $stamp);
     
    		if ($date_boucle_mois == '01/01/2021')
    			$nom_fetes = 'Nouvel An'; 
     
    		elseif ($date_boucle_mois == '01/05/2021')
    			$nom_fetes = 'Fête du travail'; 
     
    		elseif ($date_boucle_mois == '08/05/2021')
    			$nom_fetes = 'Armistice 1945';
     
    		elseif ($date_boucle_mois == '14/07/2021')
    			$nom_fetes = 'Fête nationale'; 
     
    		elseif ($date_boucle_mois == '01/11/2021')
    			$nom_fetes = 'Toussaint'; 
     
     
     
    		echo '
    		<tr>
    			<td width="30" bgcolor = "'.$color[2].'">'.$i.'</td>
    			<td width="80" bgcolor = "'.$color[2].'">'. ucwords(strftime("%A", $stamp)). '</td>
    			<td width="1080" bgcolor = '.$color[$we].'> &nbsp;  '.$nom_fetes.'  </td>
    		</tr>
    		
    		';
    	}
     
    	echo '
    	</table>';
     
     
    ?>

    Nom : DVP7.gif
Affichages : 82
Taille : 25,8 Ko

  7. #47
    Membre du Club Avatar de RinaBK
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2021
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2021
    Messages : 92
    Points : 64
    Points
    64
    Par défaut
    Ton code veut simplement pas que tu oublie cette date


    Trève de plaisenterie
    Première chose, lorsque l'on utilise des if()...elseif()... on finit toujours avec un else()
    Aussi, je sais que cela fait un peu vieux-jeu, mais n’hésite pas à utiliser des accolades :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if ($date_boucle_mois == '01/01/2021') { $nom_fetes = 'Nouvel An'; }
    elseif ($date_boucle_mois == '01/05/2021') { $nom_fetes = 'Fête du travail'; }
    elseif ($date_boucle_mois == '08/05/2021') { $nom_fetes = 'Armistice 1945'; }
    elseif ($date_boucle_mois == '14/07/2021') { $nom_fetes = 'Fête nationale'; }
    elseif ($date_boucle_mois == '01/11/2021') { $nom_fetes = 'Toussaint'; }
    else {}
    Si ton code répète la variable, c’est que tout simplement elle est définie. Donc, il faudrait vider la variable justement grâce au dernier else() que tu as omis comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if ($date_boucle_mois == '01/01/2021') { $nom_fetes = 'Nouvel An'; }
    elseif ($date_boucle_mois == '01/05/2021') { $nom_fetes = 'Fête du travail'; }
    elseif ($date_boucle_mois == '08/05/2021') { $nom_fetes = 'Armistice 1945'; }
    elseif ($date_boucle_mois == '14/07/2021') { $nom_fetes = 'Fête nationale'; }
    elseif ($date_boucle_mois == '01/11/2021') { $nom_fetes = 'Toussaint'; }
    else { $nom_fetes = ''; }
    Voilà, problème résolu
    • On dit que le ridicule ne tue pas; On dit aussi que ce qui nous tue pas, nous rends plus fort; Alors pourquoi ne pas dire : Le ridicule nous rends plus fort !
    • On reproche aux gens de parler d'eux-même; C'est pourtant le sujet qu'ils traitent le mieux !

  8. #48
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut Youpiiiiiiiii !!!
    RinaBK,

    J'ai passé un temps fou sur cette simple broutille qui résistait et me narguait

    En voyant le code de ta réponse, je me suis dit que ce n'était pas le bon code, car j'avais bien entendu ajouté ce fichu "else".

    Mais voilà, c'est que je les aime aussi moi les elses et j'en avais collé sur chaque ligne de comparaison

    Merci je vais fignoler ça aux petits oignons.

    Les fêtes mobiles et les lunes ? parait avec tous les évènements actuels que les poules auront bientôt des dents

    Pour vous les filles

  9. #49
    Membre du Club Avatar de RinaBK
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2021
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2021
    Messages : 92
    Points : 64
    Points
    64
    Par défaut
    Lorsque j'ai regardé ton code la première fois, je t'avoue que je ne comprenais pas le problème, car ton code est très bien fait. Je me suis dit que peut-être c'était les elseif() qui posait problème et je les ai tous remplacé par des if(). Après, une fois toutes les lignes modifiées, c'est là que je me suis rendue compte qu'il fallait réinitialiser la variable... Donc, j'ai remis les elseif() et j'ai initialiser la variable dans else pour la vider et le tour était jouée
    Des fois on est tellement dans ces lignes de codes, que l'on n'y voit plus rien
    • On dit que le ridicule ne tue pas; On dit aussi que ce qui nous tue pas, nous rends plus fort; Alors pourquoi ne pas dire : Le ridicule nous rends plus fort !
    • On reproche aux gens de parler d'eux-même; C'est pourtant le sujet qu'ils traitent le mieux !

  10. #50
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Moi je dois t'avouer que sur les propos de ta première phrase, je connais quelqu'un qui ne sera pas du tout d'accord avec toi

    Ceci dit, il est une règle, que j'avais d'ailleurs vantée sur ce forum mais pour autre langage, consistant à savoir prendre du recul.

    Autrement dit, de mettre un "espace" matériel et espace temps avec le PC un certain moment.

    Bref, de ne plus avoir le nez dans le guidon afin que le cerveau mouline/ingurgite et traite selon son rythme les infos récoltées précédemment.

    Avec de l'expérience, très souvent en revenant derrière son ordinatueur de temps, hé bien le cerveau avait résolu le problème, justement grâce à ce recul salutaire.

    DS7

  11. #51
    Membre du Club Avatar de RinaBK
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2021
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2021
    Messages : 92
    Points : 64
    Points
    64
    Par défaut
    C'est clair ! Il faut savoir prendre des pauses de temps en temps. C'est justement mon gros problème, je ne sais pas m'arrêter, surtout si j'ai mes codes dans la tête
    Après je m'étonne parce que je ne vois plus rien et que je fais des erreurs stupides
    • On dit que le ridicule ne tue pas; On dit aussi que ce qui nous tue pas, nous rends plus fort; Alors pourquoi ne pas dire : Le ridicule nous rends plus fort !
    • On reproche aux gens de parler d'eux-même; C'est pourtant le sujet qu'ils traitent le mieux !

  12. #52
    Membre du Club
    Femme Profil pro
    particulier
    Inscrit en
    Juillet 2020
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : particulier

    Informations forums :
    Inscription : Juillet 2020
    Messages : 51
    Points : 59
    Points
    59
    Par défaut
    Ce sera bien plus propre avec ça :
    https://www.php.net/manual/fr/contro...res.switch.php

    Mais pour faire plus pro et plus rapide, tu mets tes dates comme clefs du tableau avec le texte correspondant dans la valeur.

    ex (avec des erreurs possible, ce n'est qu'une piste) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $holidays = array(mktime(12, 0, 0, 1, 1, $num_year) => "1er janvier jour de l'an", etc.);
     
     
    echo '
    <tr>
    <td width="30" bgcolor = "'.$color[2].'">'.$i.'</td>
    <td width="80" bgcolor = "'.$color[2].'">'. ucwords(strftime("%A", $stamp)). '</td>
    <td width="1080" bgcolor = '.$color[$we].'> &nbsp; '.@$holidays[$tamp].' </td>
    </tr>
     
    ';

  13. #53
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    pas-douée,

    Ah, j'aime bien ta méthode afin d'encapsuler les strings dans l'array provisoirement nommé "holidays"

    Pour le switch, oui ça c'était au menu sur ma table.

    Petit à petit j'améliore la bête grâce aux participants de ce thread

    Merci

    DS7

  14. #54
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    En plus, en utilisant un tableau, ça permet d'exploiter l'opérateur null coalescent dans la boucle.
    Et en parlant de la boucle, plutôt que de batailler avec for et mktime, la classe DatePeriod te permet de définir un itérateur (donc utilisable avec foreach) entre deux dates (comme le début d'un mois jusqu'au suivant) avec le découpage que tu veux (comme un jour):
    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
    <?php
     
    $year = '2021';
    $month = '07';
     
    $begin = new DateTimeImmutable("$year-$month-01"); // date de début
    $end = $begin->modify('next month');
     
    $step = new DateInterval('P1D'); // durée de 1 jour
     
    $period = new DatePeriod($begin, $step, $end);
     
    $holidays = [
        '01-01' => 'Nouvel An', 
        '05-01' => 'Fête du travail', 
        '05-08' => 'Armistice 1945',
        '07-14' => 'Fête nationale',
        '11-01' => 'Toussaint',
        '11-11' => 'Armistice 1918'
    ];
     
    setlocale(LC_TIME, 'fr_FR.UTF-8', 'fr_FR', 'fr', 'fra_fra');
    ?><!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <title>calendrier</title>
        <style>
    * { font-family: monospace; }
    table { border: 1px outset black; }
    caption { text-transform: uppercase; font-weight: bold; }
    td { border: 1px inset black; }
    td:nth-child(1) { width: 30px; background-color: #C7C7F3; }
    td:nth-child(2) { width: 80px; background-color: #C7C7F3; text-transform: capitalize; }
    td:nth-child(3) { width: 1080px; padding-left: 5px; }
     
    tr:nth-child(7n+1) td:nth-child(3) { background-color: #A6BCFF; }
    tr:nth-child(7n+2) td:nth-child(3) { background-color: #FFE6CC; }
    tr:nth-child(7n+3) td:nth-child(3) { background-color: #C7C7F3; }
    tr:nth-child(7n+4) td:nth-child(3) { background-color: #FFFFA4; }
    tr:nth-child(7n+5) td:nth-child(3) { background-color: #A7FEBA; }
    tr:nth-child(7n+6) td:nth-child(3) { background-color: #D7D7D7; }
    tr:nth-child(7n) td:nth-child(3) { background-color: #F5B7FB; }
        </style>
    </head>
    <body>
        <table id="calendar">
            <caption><?= strftime('%B %Y', $begin->getTimestamp()) ?></caption>
     
    <?php foreach($period as $current): ?>
            <tr>
                <td><?= ltrim($current->format('d'), '0') ?></td>
                <td><?= strftime('%A', $current->getTimestamp()) ?></td>
                <td><?= $holidays[$current->format('m-d')] ?? '' ?></td>
            </tr>
    <?php endforeach; ?>
        </table>
    </body>
    </html>
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  15. #55
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    CosmoKnacki

    Je viens de tester, ça marche également trop bien

    C'est de la haute voltige, pour l'instant je vais me contenter à petites doses de tenter d'analyser chaque nouveauté.

    Tu me donnes encore beaucoup de grain à moudre, et je découvre des tas de choses inconnues encore.

    Au premier abord c'est assez déstabilisant

    Merci

    DS7

  16. #56
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Ne te laisse pas impressionner par le fait que ça utilise des classes, ni par le suffixe "immutable" de l'une d'elle (quand on utilise juste DateTime avec la méthode DateTime::modify celle-ci modifie l'objet de départ, donc la date de début, alors qu'avec DateTimeImmutable la même méthode ne modifie pas l'objet de départ mais renvoie un nouvel objet avec la modification, un point c'est tops.)
    Quant à l'opérateur null coalescent, venu directement d'Australie et inventé par des koalas maléfiques, c'est juste un truc qui permet de renvoyer une valeur par défaut (ici une chaîne vide) lorsque le tableau holidays n'a pas de clef pour le jour courant.

    Sinon P1D signifie "période de 1 jour". (Je ne sais plus où se cache la nomenclature de ce truc dans la doc PHP). Ah bah c'est bien sûr.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  17. #57
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    En attendant, avant d'avoir décortiqué et pigé chaque nouveau nom ou expression, je serais plus que largué

    Moi cherchant toujours à simplifier le code, je suis très gâté

    Merci de toutes ces nouvelles choses à découvrir.

    DS7

  18. #58
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 755
    Points : 2 986
    Points
    2 986
    Par défaut
    Bonsoir

    Je n'avais pas lu toute la discussion et j'avais déjà écrit le code que je propose ci-dessous puis, non, j'arrive trop tard.

    Je le poste quand même juste pour insister sur un point : évite tant que tu peux les if ... elseif ... surtout s'ils sont imbriqués comme les tiens. Essaie de toujours te demander "Est-ce que je ne pourrais pas faire sans if ... else ..." et mieux, carrément ne pas faire de if.

    Le code ci-dessous propose une solution pour se passer totalement de if.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $date_boucle_mois = '08/05/2021';
     
    $arr = 
        [
            '01/01/2021' => 'Nouvel An',
            '01/05/2021' => 'Fête du travail',
            '08/05/2021' => 'Armistice 1945',
            '14/07/2021' => 'Fête nationale',
            '01/11/2021' => 'Toussaint'
        ];
     
    $nom_fetes = $arr[$date_boucle_mois] ?? '';
     
    echo $date_boucle_mois . ' - ' . $nom_fetes;
    (note: ce code est fortement améliorable car les dates que tu as sont les mêmes d'années en années; il n'est pas utile de mentionner l'année 2021 du coup et, mieux, il devrait être possible d'interroger des calendriers publics "Calendrier des jours de congés officiels en France" afin de ne pas avoir à gérer cela soi-même)

    Bonne soirée.
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  19. #59
    Membre du Club Avatar de RinaBK
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2021
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2021
    Messages : 92
    Points : 64
    Points
    64
    Par défaut
    J'aime beaucoup ta méthode sans les if..else.. cavo789
    Je ne connaissais pas cette méthode, mais je vais me remettre à réapprendre à code en PHP
    • On dit que le ridicule ne tue pas; On dit aussi que ce qui nous tue pas, nous rends plus fort; Alors pourquoi ne pas dire : Le ridicule nous rends plus fort !
    • On reproche aux gens de parler d'eux-même; C'est pourtant le sujet qu'ils traitent le mieux !

  20. #60
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Christophe

    Whaouuu encore une nouvelle méthode inhérente au remplacement des if/else.

    Comme je l'avais déjà évoqué en amont, je code déjà au plus simple et ensuite si-possible j'améliore

    Bien entendu que les if/else sont grandement dépréciés de tous ou la plupart des langages.

    J'avais aussi songé à aller pêcher ces données sur des sites adéquats et fiables.

    Mais je privilégie l'autonomie du programme.

    Pour la date en dur de l'année en code, oui oui je sais et elle n'est là simplement à des fins de simplification et de principe.

    A propos de la détection des dates de jours fériés, j'ai trouvé ce site et après tests sur plusieurs années ; tout est ok :
    http://www.informatix.fr/tutoriels/p...ais-en-php-137
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo date("d/m/Y", class_jours_feries::getHolidays(2023)[5]); // Pentecôte
    Ceci dit je te remercie également du temps que tu as passé pour moi à m'apprendre ce nouveau concept que je vais petit à petit tenter de m'habituer et un jour pourquoi pas me mettre d'instinct à l'inclure en code.

    D'ailleurs l'autre fois j'avais eu une réponse contenant un ternaire et je suis étonné que désormais je l'utilise naturellement.

    C'est très gentil à toi aussi d'avoir apporté ta pierre, à bientôt,

    DS7

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

Discussions similaires

  1. [XL-2016] amélioration boucle for trop longue
    Par Phenicia77 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 15/09/2020, 17h50
  2. Modification condition dans une boucle for
    Par fred61 dans le forum Débuter
    Réponses: 14
    Dernier message: 06/08/2013, 15h39
  3. [Batch] Modification des paramètres d'entrée dans une boucle FOR
    Par reppier dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 15/06/2009, 15h23
  4. Pb de modification de liste dans une boucle for
    Par schnito dans le forum Général Python
    Réponses: 5
    Dernier message: 20/04/2007, 10h27
  5. [langage] boucle "for" modification du pas
    Par K-ZimiR dans le forum Langage
    Réponses: 4
    Dernier message: 29/04/2004, 11h54

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