Boucle for avec comparaison de 1,2,3 avec des 01,02,03
Résoluemrh Messages postés 427 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
Je dois transmettre à l'administration un document PDF sur lequel je liste jour par jour les taxes de séjour perçues.
J'ai donc fait ma requête pour rechercher dans ma bdd les clients qui en avait payé pour le mois concerné et j'ai rempli un array $lignes() avec le résultat de cette requête.
J'aimerai maintenant imprimer via une boucle for le contenu de cet array, le problème est que je n'arrive pas à comparer les 9 premières valeurs de $i de ma boucle (1,2,3...9) à la clé 'jour' de mon array (01,02,03,...09)...
Du coup, ça bug !
Auriez vous une idée pour résoudre ça ?
$annee_taxe = $_GET['annee']; $mois_taxe = $_GET['mois']; // Requête taxes de séjour de l'année et du mois demandé : $req_taxes = $bdd->prepare(' SELECT contrats.date_debut,contrats.date_fin,contrats.adultes,(contrats.enfants+contrats.bebes) AS exo,SUM(compositions.prix*compositions.quantites) AS taxe 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 '); $req_taxes->execute(array( 'annee' => $annee_taxe, 'mois' => $mois_taxe )); $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>';*/ $i=1; foreach($lignes as $x => $valeur) { if($i==$valeur['jour']){ echo $valeur['jour'] . ' ' . $valeur['adultes'] . ' ' . $valeur['exo'] . ' ' . $valeur['taxe'] . '<br>'; } else { echo $i . '<br>'; } }
Linux / Chrome 107.0.0.0
- 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
- Idm for mac - Télécharger - Téléchargement & Transfert
- Copytrans heic for windows - Télécharger - Visionnage & Diaporama
- Instagram for pc - Télécharger - Divers Communication
6 réponses
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>'; } }
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']
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']) ){
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)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionAvec :
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 !
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