Boucle for avec comparaison de 1,2,3 avec des 01,02,03
Résolu/Ferméemrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 - 18 nov. 2022 à 17:22
- Boucle for avec comparaison de 1,2,3 avec des 01,02,03
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Comparaison million milliard - Accueil - Technologies
- Copytrans heic for windows - Télécharger - Visionnage & Diaporama
- Idm for mac - Télécharger - Téléchargement & Transfert
- Download instagram for pc - Télécharger - Divers Communication
6 réponses
Modifié le 18 nov. 2022 à 17:24
Résolu, c'était pas false qui fallait mettre dans le if mais '' ! (Cf. ligne 26)
$mois_taille = array('1'=>'31','2'=>'28','3'=>'31','4'=>'30','5'=>'31','6'=>'30','7'=>'31','8'=>'31','9'=>'30','10'=>'31','11'=>'30','12'=>'31'); $mois_taxe = $_GET['mois']; $lignes = array(); // Remplissage de l'array : while ($data = $req_taxes->fetch()) { $lignes[] = array( 'jour' => substr($data['date_debut'], -2), 'adultes' => $data['adultes'], 'exo' => $data['exo'], 'taxe' => $data['taxe'] ); } /*echo '<pre>' ; print_r($lignes); echo '</pre>';*/ // Initialisation de la boucle selon le nombre de jour/mois : for ($i=1; $i <=$mois_taille[$mois_taxe] ; $i++) { // $x = formatage du mois avec 0 si < 9 $x = str_pad($i, 2, "0", STR_PAD_LEFT); // Recherche de l'index du mois $x : $index = array_search($x, array_column($lignes, 'jour')); // Si l'index du mois $x existe : if($index<>''){ echo $lignes[$index]['jour'] . '=> ' . $lignes[$index]['adultes'] . ' ' . $lignes[$index]['exo'] . ' ' . $lignes[$index]['taxe'] . '<br>'; } // Sinon : else{ echo $x . '<br>'; } }
18 nov. 2022 à 10:50
bonjour,
as-tu envisagé, dans le SELECT, d'extraire le jour, en utilisant DAY()?
SELECT contrats.date_debut,contrats.date_fin,contrats.adultes, contrats.enfants+contrats.bebes AS exo, SUM(compositions.prix*compositions.quantites) AS taxe, DAY(contrats.date_debut) as jour FROM compositions INNER JOIN contrats ON contrats.id_contrat = compositions.id_contrat INNER JOIN clients ON clients.id_client = contrats.id_client INNER JOIN prestations ON prestations.id_prestation = compositions.id_prestation WHERE contrats.etat > 2 AND clients.pedestria = 0 AND prestations.id_prestation = 21 AND YEAR(contrats.date_debut) = :annee AND MONTH(contrats.date_debut) = :mois GROUP BY contrats.date_debut ORDER BY contrats.date_debut ASC
ensuite,
'jour' => $data['jour']
18 nov. 2022 à 11:20
Bonjour,
J'ai une préférence pour la solution proposée par Yg_be,
mais au cas où .. tu pourrais aussi simplement "forcer" en numérique la valeur
if( $i == intVal($valeur['jour']) ){
18 nov. 2022 à 12:18
Merci à vous deux pour votre aide mais je me suis mal expliqué...
Je n'ai pas de problème avec le remplissage de l'array en lui même :
Array
(
[0] => Array
(
[jour] => 01
[adultes] => 6
[exo] => 0
[taxe] => 29.4000
)
[1] => Array
(
[jour] => 04
[adultes] => 14
[exo] => 4
[taxe] => 30.8000
)
[2] => Array
(
[jour] => 05
[adultes] => 10
[exo] => 0
[taxe] => 21.0000
)
[3] => Array
(
[jour] => 30
[adultes] => 2
[exo] => 2
[taxe] => 49.0000
)
)
Mais plutôt avec la sortie que je voudrais formater comme ça :
01 06 0 29.40
02
03
04 14 4 30.80
05 10 0 21.00
06
07
... etc ...
J'ai donc besoin d'une boucle for ($i = 1; $i <= 31; $i++) je suppose mais il faut également que je trouve le moyen d'afficher le 0 des nombres à 1 chiffre (1 à 9)
18 nov. 2022 à 12:20
D'autre par, je viens de me rendre compte que dans mon post #1 il n'y a pas d'incrémentation du $i, ça ne peut donc pas marcher
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question18 nov. 2022 à 13:56
Avec :
for ($i=1; $i <=31 ; $i++) {
$i = str_pad($i, 2, "0", STR_PAD_LEFT);
echo $i . '<br>';
}
J'ai ma boucle pour écrire les 31 lignes du mois...
Il faut maintenant que j'arrive à comparer la valeur de la clé ['jour'] avec $i sans dépasser les limites de l'array qui quelques fois contient 2 ou 3 enregistrements, des fois aucun !
Modifié le 18 nov. 2022 à 17:19
L'usine à gaz ci-dessous fonctionne mais je n'ai pas ma première ligne !
$mois_taille =array('1'=>'31','2'=>'28','3'=>'31','4'=>'30','5'=>'31','6'=>'30','7'=>'31','8'=>'31','9'=>'30','10'=>'31','11'=>'30','12'=>'31'); $mois_taxe = $_GET['mois']; // Initialisation de la boucle selon le nombre de jour/mois : for ($i=1; $i <=$mois_taille[$mois_taxe] ; $i++) { // $x = formatage du mois avec 0 si < 9 $x = str_pad($i, 2, "0", STR_PAD_LEFT); // Recherche de l'index du mois $x : $index = array_search($x, array_column($lignes, 'jour')); // Si l'index du mois $x existe : if($index<>false){ echo $lignes[$index]['jour'] . '=> ' . $lignes[$index]['adultes'] . ' ' . $lignes[$index]['exo'] . ' ' . $lignes[$index]['taxe'] . '<br>'; } // Sinon : else{ echo $x . '<br>'; } }
Une idée ?
Array
(
[0] => Array
(
[jour] => 01
[adultes] => 19
[exo] => 0
[taxe] => 16.1000
)
[1] => Array
(
[jour] => 15
[adultes] => 8
[exo] => 0
[taxe] => 26.6000
)
[2] => Array
(
[jour] => 18
[adultes] => 18
[exo] => 0
[taxe] => 67.2000
)
[3] => Array
(
[jour] => 29
[adultes] => 9
[exo] => 0
[taxe] => 23.8000
)
)
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15=> 8 0 26.6000
16
17
18=> 18 0 67.2000
19
20
21
22
23
24
25
26
27
28
29=> 9 0 23.8000
30
18 nov. 2022 à 17:16
Pourtant echo $lignes[0]['adultes']; affiche bien 19 !!!