Bonjour,
Je cherche comment faire pour pouvoir afficher tous les nombres qui existent 2 nombres dans une liste déroulante.
Exemple: les nombres compris entre 201 et 250.

Je fais avec range : echo implode(" ",range(201,"250"));

Et les nombres affichent cependant je ne sais pas comment faire apparaitre ces nombres dans un formulaire en liste déroulante.
Modérateur
Salut,

En php ?
Pourquoi pas une boucle for à l'intérieur d'un sélect avec un echo d'option à chaque itération ?
Modérateur
_laurent a écrit :
Salut,

En php ?
Pourquoi pas une boucle for à l'intérieur d'un sélect avec un echo d'option à chaque itération ?


Une boucle pour ça ?

$options = implode("\n",array_map(fn($r)=> vsprintf('<option value="%s">%s</option>', [$r, $r]) ,array_filter(range(201, 250), fn($i)=> $i % 2 == 0)));

echo sprintf('<select id="%s" name="%s">%s</select>', 'mon_select','mon_select', $options );
Modérateur
niuxe a écrit :
Une boucle pour ça ?

Hahaha bah perso je trouve que c'est plus simple et lisible (et peut être aussi plus accessible par un débutant)

<?php echo "<select>";
 for ($i = 201; $i <= 250; $i++) {
    echo "<option value='".$i."'>".$i."</option>";
}
echo "</select>";

Mais bon je suis loin d'être un monstre en php (surtout en bonnes pratiques)... les boucles c'est le mal ?
Modifié par _laurent (06 Feb 2020 - 03:27)
Modérateur
_laurent a écrit :

Hahaha bah perso je trouve que c'est plus simple et lisible (et peut être aussi plus accessible par un débutant)

+1 Hier soir en postant la réponse, c'est un effet de style. Je trouve que l'idée de départ de Safouin avec range et implode est pertinente. D'où ma proposition, on peut traiter ce genre de cas sans les boucles. Avec d'autres langages, l'effet de style que j'avance, ce serait largement plus lisible.

En reprenant ton code et ajoutant un peu plus de lisibilité sans utiliser sprintf family (vprintf/vprintf/sprintf/etc/etc/.).

<?php 
echo "<select>";
 for ($i = 201; $i <= 250; $i += 2) { // avance l'index de 2
    echo "<option value='$i'>$i</option>"; // la variable sera interprétée puisqu'on utilise des guillements double. La valeur d''un attribut entourée par des guillemets simples est valide en html.  
}
echo "</select>";

Smiley smile

_laurent a écrit :

Mais bon je suis loin d'être un monstre en php (surtout en bonnes pratiques)... les boucles c'est le mal ?


idem, je ne suis pas un monstre en php. Les boucles ne sont pas le mal en soit puisque tous les langages ont des boucles. Mais ce qui peut te tuer les perfs, ce sont bien des boucles (surtout si elles sont mal contrôlée). Pour te donner un exemple : Dans un controlleur, tu récupères des données d'une base de données et tu dois formater tes données. Tu risques de faire une boucle dans le controlleur et dans la vue tu refais une boucle dans la vue pour afficher ces dernières (totale => 2 boucles).

ps :
- Safouin ne nous a pas dit s'il souhaite avoir des valeurs pairs ou impairs. Comme je l'ai fait dans ma première proposition, l’implémentation du modulo (lire le commentaire de Jonathon Reinhart) est plus abouti.
- le code que j'ai écrit hier soir est en php 7.4.x (fn)
Modifié par niuxe (06 Feb 2020 - 08:56)
Modérateur
Ah merci pour ces précisions.

- Pour les guillemets et la variable dedans il me semblait bien mais j'étais pas sur de moi et j'avais rien pour tester sous le coude Smiley ravi
- J'étais passé a coté du pair/impair et du modulo
- Merci pour l'exemple des boucles en double Smiley lol

Bonne journée !