Aide sur les array
Résolu/Fermé
isa--
Messages postés
82
Date d'inscription
lundi 16 septembre 2013
Statut
Membre
Dernière intervention
20 décembre 2024
-
20 oct. 2017 à 16:38
isa-- Messages postés 82 Date d'inscription lundi 16 septembre 2013 Statut Membre Dernière intervention 20 décembre 2024 - 26 oct. 2017 à 07:27
isa-- Messages postés 82 Date d'inscription lundi 16 septembre 2013 Statut Membre Dernière intervention 20 décembre 2024 - 26 oct. 2017 à 07:27
4 réponses
jordane45
Messages postés
38451
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 mars 2025
4 739
20 oct. 2017 à 19:09
20 oct. 2017 à 19:09
Là. . Pour le coup... sans voir le reste de ton code....
isa--
Messages postés
82
Date d'inscription
lundi 16 septembre 2013
Statut
Membre
Dernière intervention
20 décembre 2024
1
Modifié le 23 oct. 2017 à 13:49
Modifié le 23 oct. 2017 à 13:49
Bonjour,
Au risque de me faire gronder (c'est un peu le bordel dans mon code, je ne suis pas encore passée par la période "ranger"), voici mon code :
Merci de ton aide
Isa
Au risque de me faire gronder (c'est un peu le bordel dans mon code, je ne suis pas encore passée par la période "ranger"), voici mon code :
<?php include('./haut.html'); function eachDate3 ($start, $end) { $DateDepart = strtotime($start); $DateFin = strtotime($end); $NombreSecondes = $DateFin - $DateDepart; $NombreJours = $NombreSecondes / (3600*24); $tableau = array(); for($i = 0; $i <= $NombreJours; $i++) { $date = date('Y-m-d', $DateDepart+((3600*24)*$i)+3600); array_push($tableau, $date); } return $tableau; } echo "<div align=\"center\">"; echo "<img src=\"../construction.png\" alt=\"en construction\" width=100><br>"; echo "du mois de <b>"; $mois1=$_POST["mois1"]; switch ($mois1) { case 1: echo "Janvier"; break; case 2: echo "Fevrier"; break; case 3: echo "Mars"; break; case 4: echo "Avril"; break; case 5: echo "Mai"; break; case 6: echo "Juin"; break; case 7: echo "Juillet"; break; case 8: echo "Aout"; break; case 9: echo "Septembre"; break; case 10: echo "Octobre"; break; case 11: echo "Novembre"; break; case 12: echo "Decembre"; break; } echo " "; echo $annee1=$_POST["annee1"]; echo "</b> au mois de <b>"; $mois2=$_POST["mois2"]; $mois2 = preg_replace("/\r|\n/", "", $mois2); switch ($mois2) { case 1: echo "Janvier"; break; case 2: echo "Fevrier"; break; case 3: echo "Mars"; break; case 4: echo "Avril"; break; case 5: echo "Mai"; break; case 6: echo "Juin"; break; case 7: echo "Juillet"; break; case 8: echo "Aout"; break; case 9: echo "Septembre"; break; case 10: echo "Octobre"; break; case 11: echo "Novembre"; break; case 12: echo "Decembre"; break; } echo " "; echo $annee2=$_POST["annee2"]; echo "</b><br>"; // calcul dernier jour dernier mois $datepremierjour=$annee2."-".$mois2."-01"; list($annee, $mois, $jour) = explode('-',$datepremierjour); //recuperation du premier du mois suivant $date_mois_suivant = date("Y/m/d", mktime(0,0,0,$mois2+1,$jour,$annee)); list($annee, $mois2, $jour) = explode('/',$date_mois_suivant); //recuperation de la veille; donc le dernier du jour du mois précédent $end = date("Y-m-d", mktime(0,0,0,$mois2,$jour-1,$annee)); //premier jour $start=$annee1."-".$mois1."-01"; if($start > $end) { return false; } //tableau des conges $debut=strtotime($start); $fin=strtotime($end); $holidays = array(); // On boucle dans le cas où l'année de départ serait différente de l'année d'arrivée $diff_year = date('Y', $fin) - date('Y', $debut); for ($i = 0; $i <= $diff_year; $i++) { $year = (int)date('Y', $debut) + $i; // Liste des jours feriés $holidays[] = $year.'-01-01'; // Jour de l'an $holidays[] = $year.'-05-01'; // Fete du travail $holidays[] = $year.'-05-08'; // Victoire 1945 $holidays[] = $year.'-07-14'; // Fete nationale $holidays[] = $year.'-08-15'; // Assomption $holidays[] = $year.'-11-01'; // Toussaint $holidays[] = $year.'-11-11'; // Armistice 1918 $holidays[] = $year.'-12-25'; // Noel // Récupération de paques. Permet ensuite d'obtenir le jour de l'ascension et celui de la pentecote $easter = easter_date($year); $holidays[] = date($year.'-m-d', $easter + 86400); // Paques $holidays[] = date($year.'-m-d', $easter + (86400*39)); // Ascension $holidays[] = date($year.'-m-d', $easter + (86400*50)); // Pentecote } var_dump($holidays); //constuction des dates echo "<table width=100% border=1 class=\"collapse\">"; // 1ere ligne echo "<tr><th> </th><th> </th>\n"; function eachDate ($start, $end) { $DateDepart = strtotime($start); $DateFin = strtotime($end); $NombreSecondes = $DateFin - $DateDepart; $NombreJours = $NombreSecondes / (3600*24); $ToutesDates = array(); for($i = 0; $i < $NombreJours; $i++) { $date = date('d', $DateDepart+((3600*24)*$i)+3600); array_push($ToutesDates, $date); } return $ToutesDates; } foreach(eachDate($start, $end) as $date) { echo "<th>".$date."</th>\n"; } echo"</tr>"; // deuxième ligne echo "<tr>"; echo "<th>Nom</th>\n<th>Prénom</th>\n"; function eachDate1 ($start, $end) { $DateDepart = strtotime($start); $DateFin = strtotime($end); $NombreSecondes = $DateFin - $DateDepart; $NombreJours = $NombreSecondes / (3600*24); $ToutesDates = array(); for($i = 0; $i < $NombreJours; $i++) { $date = date('D', $DateDepart+((3600*24)*$i)+3600); array_push($ToutesDates, $date); } return $ToutesDates; } foreach(eachDate1($start, $end) as $date) { echo "<th>"; switch ($date) { case "Mon": echo "L"; break; case "Tue": echo "M"; break; case "Wed": echo "M"; break; case "Thu": echo "J"; break; case "Fri": echo "V"; break; case "Sat": echo "S"; break; case "Sun": echo "D"; break; } echo "</th>\n"; } ?> </tr> <?php // rechercher tout le personnel function afficheservice($service){ include('../connexion.php'); $req = "SELECT * FROM `personnel` WHERE `prenom` NOT LIKE 'Emmanuel' and `service` LIKE '$service' ORDER BY service "; $res = $conn->query($req); // pour chaque personne while ($data = mysqli_fetch_array($res)) { echo "<tr><td>"; echo $nom=$data['nom']; echo "</td>\n<td>"; echo $prenom=$data['prenom']; $id=$data['id']; //rechercher les conges de cette personne dans la période $mois1=$_POST["mois1"]; $annee1=$_POST["annee1"]; $start=$annee1."-".$mois1."-01"; //calcul dernier jour dernier mois $mois2=$_POST["mois2"]; $annee2=$_POST["annee2"]; $datepremierjour=$annee2."-".$mois2."-01"; list($annee, $mois, $jour) = explode('-',$datepremierjour); //recuperation du premier du mois suivant $date_mois_suivant = date("Y/m/d", mktime(0,0,0,$mois2+1,$jour,$annee)); list($annee, $mois2, $jour) = explode('/',$date_mois_suivant); //recuperation de la veille; donc le dernier du jour du mois précédent $end = date("Y-m-d", mktime(0,0,0,$mois2,$jour-1,$annee)); include('../connexion.php'); $req2 = "SELECT * FROM `conges` WHERE `id_personnel` LIKE '$id' and `datedebut` <= '$end' and `datefin` >= '$start' "; $res2 = $conn->query($req2); $tableau = array(); // pour chaque personne // contruction du tableau des jours de conges while ($data2 = mysqli_fetch_array($res2)) { $id=$data2['id']; $debutconges=$data2['datedebut']; $finconges=$data2['datefin']; $tableau=array_merge($tableau, eachDate3($debutconges,$finconges)); } // pour chaque jour de la période $DateDepart = strtotime($start); $DateFin = strtotime($end); $NombreSecondes = $DateFin - $DateDepart; $NombreJours = $NombreSecondes / (3600*24); for($i = 0; $i < $NombreJours; $i++) { $date = date('Y-m-d', $DateDepart+((3600*24)*$i)+3600); $weekend = date('D', $DateDepart+((3600*24)*$i)+3600); echo "<td "; // colorer le weekend //echo $date; if ($weekend=="Sun" OR $weekend=="Sat"){ echo " bgcolor=\"lightblue\"";} //colorer les jours féries //var_dump($arr_bank_holidays); //if (in_array($date, $holidays)) { echo "bgcolor=\"red\"";} //date du jour $dujour=date("Y-m-d"); if ($date==$dujour){ echo " style=\"background-image:url(./motif.png);background-repeat:repeat\"";} if (in_array($date, $tableau)) { echo "bgcolor=\"yellow\"> ok";} else {echo ">";} //if ($weekend=="Sun" OR $weekend=="Sat");{ echo " bgcolor=\"lightblue\">";} echo "</td>\n"; } echo "</tr>"; } } $DateDepart = strtotime($start); $DateFin = strtotime($end); $colspan=2+($DateFin-$DateDepart)/86400; afficheservice("COMPTA"); echo "<tr><td colspan="; echo $colspan; echo "> </td></tr>"; afficheservice("ACHATS"); /*echo "<tr><td> </td></tr>"; afficheservice("RH"); echo "<tr><td> </td></tr>"; afficheservice("ADV"); echo "<tr><td> </td></tr>"; afficheservice("MAGASIN"); echo "<tr><td> </td></tr>"; afficheservice("CIAUX"); //contruction du tableau*/ ?>
EDIT : Ajout du LANGAGE dans les balises de code (pour avoir la coloration syntaxique ! ) (jordane)
J'arrive à afficher mon tableau $holidays aprés ma boucle ou avant, mais pas dedans..Merci de ton aide
Isa
jordane45
Messages postés
38451
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 mars 2025
4 739
23 oct. 2017 à 14:58
23 oct. 2017 à 14:58
Hello,
Sans avoir regardé en détail ton code ... je pense déjà qu'on peut le réaranger légèrement.
Sachant que le but d'une fonction étant d'être réutilisable.. il ne sert à rien d'en créer plusieurs copies juste pour changer un paramètre...
Donc voici ton code légèrement amélioré.
NB : La fonction afficheservice mériterait d'être revue pour être mieux découpée et améliorée... mais là .. j'ai la flemme.
je te laisse faire.....
NB² : On n'évite d'utiliser les variables POST dans des fonctions. A la place, on enverra les valeurs en les passant en paramétres des fonctions.
NB3 : On regroupe les fonctions ensemble au lieu de les disséminer au milieu du code en vrac ...
Sans avoir regardé en détail ton code ... je pense déjà qu'on peut le réaranger légèrement.
Sachant que le but d'une fonction étant d'être réutilisable.. il ne sert à rien d'en créer plusieurs copies juste pour changer un paramètre...
Donc voici ton code légèrement amélioré.
<?php include('./haut.html'); function eachDate3 ($start, $end) { $DateDepart = strtotime($start); $DateFin = strtotime($end); $NombreSecondes = $DateFin - $DateDepart; $NombreJours = $NombreSecondes / (3600*24); $tableau = array(); for($i = 0; $i <= $NombreJours; $i++) { $date = date('Y-m-d', $DateDepart+((3600*24)*$i)+3600); array_push($tableau, $date); } return $tableau; } //retourne le nom du mois en fonction de son numéro function getMoisStr($moisNum = 1){ $arr_mois = array('Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Aôut','Septembre','Octobre','Novembre','Décembre'); return $arr_mois[$moisNum- 1]; } function eachDate($start, $end,$formatRetour = 'd') { $DateDepart = strtotime($start); $DateFin = strtotime($end); $NombreSecondes = $DateFin - $DateDepart; $NombreJours = $NombreSecondes / (3600*24); $ToutesDates = array(); for($i = 0; $i < $NombreJours; $i++) { $date = date($formatRetour, $DateDepart+((3600*24)*$i)+3600); array_push($ToutesDates, $date); } return $ToutesDates; } function afficheservice($service,$annee1,$mois1,$annee2,$mois2){ include('../connexion.php'); $req = "SELECT * FROM `personnel` WHERE `prenom` NOT LIKE 'Emmanuel' and `service` LIKE '$service' ORDER BY service "; $res = $conn->query($req); // pour chaque personne while ($data = mysqli_fetch_array($res)) { echo "<tr><td>"; echo $nom=$data['nom']; echo "</td>\n<td>"; echo $prenom=$data['prenom']; $id=$data['id']; //rechercher les conges de cette personne dans la période $start=$annee1."-".$mois1."-01"; //calcul dernier jour dernier mois $datepremierjour=$annee2."-".$mois2."-01"; list($annee, $mois, $jour) = explode('-',$datepremierjour); //recuperation du premier du mois suivant $date_mois_suivant = date("Y/m/d", mktime(0,0,0,$mois2+1,$jour,$annee)); list($annee, $mois2, $jour) = explode('/',$date_mois_suivant); //recuperation de la veille; donc le dernier du jour du mois précédent $end = date("Y-m-d", mktime(0,0,0,$mois2,$jour-1,$annee)); include('../connexion.php'); $req2 = "SELECT * FROM `conges` WHERE `id_personnel` LIKE '$id' and `datedebut` <= '$end' and `datefin` >= '$start' "; $res2 = $conn->query($req2); $tableau = array(); // pour chaque personne // contruction du tableau des jours de conges while ($data2 = mysqli_fetch_array($res2)) { $id=$data2['id']; $debutconges=$data2['datedebut']; $finconges=$data2['datefin']; $tableau=array_merge($tableau, eachDate3($debutconges,$finconges)); } // pour chaque jour de la période $DateDepart = strtotime($start); $DateFin = strtotime($end); $NombreSecondes = $DateFin - $DateDepart; $NombreJours = $NombreSecondes / (3600*24); for($i = 0; $i < $NombreJours; $i++) { $date = date('Y-m-d', $DateDepart+((3600*24)*$i)+3600); $weekend = date('D', $DateDepart+((3600*24)*$i)+3600); echo "<td "; // colorer le weekend //echo $date; if ($weekend=="Sun" OR $weekend=="Sat"){ echo " bgcolor=\"lightblue\"";} //colorer les jours féries //var_dump($arr_bank_holidays); //if (in_array($date, $holidays)) { echo "bgcolor=\"red\"";} //date du jour $dujour=date("Y-m-d"); if ($date==$dujour){ echo " style=\"background-image:url(./motif.png);background-repeat:repeat\"";} if (in_array($date, $tableau)) { echo "bgcolor=\"yellow\"> ok";} else {echo ">";} //if ($weekend=="Sun" OR $weekend=="Sat");{ echo " bgcolor=\"lightblue\">";} echo "</td>\n"; } echo "</tr>"; } } //--------- VARIABLES ---------// $mois1 = !empty($_POST["mois1"]) ? intval(preg_replace("/\r|\n/", "",$_POST["mois1"])) : date('m'); $mois2 = !empty($_POST["mois2"]) ? intval(preg_replace("/\r|\n/", "",$_POST["mois2"])) : date('m'); $annee1 = !empty($_POST["annee1"]) ? intval($_POST["annee1"]) : date('Y'); $annee2 = !empty($_POST["annee2"]) ? intval($_POST["annee2"]) : date('Y'); echo "<div align=\"center\">"; echo "<img src=\"../construction.png\" alt=\"en construction\" width=100><br>"; echo "du mois de <b>"; echo getMoisStr($mois1); echo " "; echo $annee1; echo "</b> au mois de <b>"; echo getMoisStr($mois2); echo " "; echo $annee2 echo "</b><br>"; // calcul dernier jour dernier mois $datepremierjour=$annee2."-".$mois2."-01"; list($annee, $mois, $jour) = explode('-',$datepremierjour); //recuperation du premier du mois suivant $date_mois_suivant = date("Y/m/d", mktime(0,0,0,$mois2+1,$jour,$annee)); list($annee, $mois2, $jour) = explode('/',$date_mois_suivant); //recuperation de la veille; donc le dernier du jour du mois précédent $end = date("Y-m-d", mktime(0,0,0,$mois2,$jour-1,$annee)); //premier jour $start=$annee1."-".$mois1."-01"; if($start > $end) { return false; } //tableau des conges $debut=strtotime($start); $fin=strtotime($end); $holidays = array(); // On boucle dans le cas où l'année de départ serait différente de l'année d'arrivée $diff_year = date('Y', $fin) - date('Y', $debut); for ($i = 0; $i <= $diff_year; $i++) { $year = (int)date('Y', $debut) + $i; // Liste des jours feriés $holidays[] = $year.'-01-01'; // Jour de l'an $holidays[] = $year.'-05-01'; // Fete du travail $holidays[] = $year.'-05-08'; // Victoire 1945 $holidays[] = $year.'-07-14'; // Fete nationale $holidays[] = $year.'-08-15'; // Assomption $holidays[] = $year.'-11-01'; // Toussaint $holidays[] = $year.'-11-11'; // Armistice 1918 $holidays[] = $year.'-12-25'; // Noel // Récupération de paques. Permet ensuite d'obtenir le jour de l'ascension et celui de la pentecote $easter = easter_date($year); $holidays[] = date($year.'-m-d', $easter + 86400); // Paques $holidays[] = date($year.'-m-d', $easter + (86400*39)); // Ascension $holidays[] = date($year.'-m-d', $easter + (86400*50)); // Pentecote } var_dump($holidays); //constuction des dates echo "<table width=100% border=1 class=\"collapse\">"; // 1ere ligne echo "<tr><th> </th><th> </th>\n"; foreach(eachDate($start, $end , 'd') as $date) { echo "<th>".$date."</th>\n"; } echo"</tr>"; // deuxième ligne echo "<tr>"; echo "<th>Nom</th>\n<th>Prénom</th>\n"; foreach(eachDate($start, $end , 'D') as $date) { echo "<th>"; switch ($date) { case "Mon": echo "L"; break; case "Tue": echo "M"; break; case "Wed": echo "M"; break; case "Thu": echo "J"; break; case "Fri": echo "V"; break; case "Sat": echo "S"; break; case "Sun": echo "D"; break; } echo "</th>\n"; } ?> </tr> <?php // rechercher tout le personnel $DateDepart = strtotime($start); $DateFin = strtotime($end); $colspan=2+($DateFin-$DateDepart)/86400; afficheservice("COMPTA",$annee1,$mois1,$annee2,$mois2) echo "<tr><td colspan="; echo $colspan; echo "> </td></tr>"; afficheservice("ACHATS",$annee1,$mois1,$annee2,$mois2) /*echo "<tr><td> </td></tr>"; afficheservice("RH"); echo "<tr><td> </td></tr>"; afficheservice("ADV"); echo "<tr><td> </td></tr>"; afficheservice("MAGASIN"); echo "<tr><td> </td></tr>"; afficheservice("CIAUX"); //contruction du tableau*/ ?>
NB : La fonction afficheservice mériterait d'être revue pour être mieux découpée et améliorée... mais là .. j'ai la flemme.
je te laisse faire.....
NB² : On n'évite d'utiliser les variables POST dans des fonctions. A la place, on enverra les valeurs en les passant en paramétres des fonctions.
NB3 : On regroupe les fonctions ensemble au lieu de les disséminer au milieu du code en vrac ...
isa--
Messages postés
82
Date d'inscription
lundi 16 septembre 2013
Statut
Membre
Dernière intervention
20 décembre 2024
1
23 oct. 2017 à 21:22
23 oct. 2017 à 21:22
Oui, en effet, ça méritait un peu de ménage...
J'avais tout fait un peu à l'arrache et c'était un peu brouillon.
Merci de t'être penchée sur mon problème.
Je vais regarder ce que tu as fait de plus près et en prendre de la graine.
Je teste et je reviens dire si c'est résolu.
Merci encore.
J'avais tout fait un peu à l'arrache et c'était un peu brouillon.
Merci de t'être penchée sur mon problème.
Je vais regarder ce que tu as fait de plus près et en prendre de la graine.
Je teste et je reviens dire si c'est résolu.
Merci encore.
isa--
Messages postés
82
Date d'inscription
lundi 16 septembre 2013
Statut
Membre
Dernière intervention
20 décembre 2024
1
26 oct. 2017 à 07:27
26 oct. 2017 à 07:27
Bonjour à tous,
Après un bon coup de ménage dans mon code (genre ne pas utiliser 20 fois le même nom de variable), et grâce à vos conseil avisés, ça fonctionne et c'est plus propre.
Mille merci à tous pour vos avis et votre indulgence.
Bonne journée
Après un bon coup de ménage dans mon code (genre ne pas utiliser 20 fois le même nom de variable), et grâce à vos conseil avisés, ça fonctionne et c'est plus propre.
Mille merci à tous pour vos avis et votre indulgence.
Bonne journée
21 oct. 2017 à 20:58
23 oct. 2017 à 11:44