2010-06-10 9 views
7

J'ai la suivante pour-boucle. Il utilise les valeurs 0-6 du lundi au dimanche respectivement.Une manière plus condensée de faire la boucle suivante?

Existe-t-il un moyen plus condensé de faire cela? Contrairement à la liste le if ($i=="day")

// $i = 0 is monday... $i = 6 is Sunday 
for($i=0;$i<7;$i++){ 

    if ($i==0) 
     echo ' <input name="repeat_on_week[]" type="checkbox" value="0" /> Monday'; 
    if ($i==1) 
     echo ' <input name="repeat_on_week[]" type="checkbox" value="1" /> Tuesday'; 
    if ($i==2) 
     echo ' <input name="repeat_on_week[]" type="checkbox" value="2" /> Wednesday'; 
    if ($i==3) 
     echo ' <input name="repeat_on_week[]" type="checkbox" value="3" /> Thursday'; 
    if ($i==4) 
     echo ' <input name="repeat_on_week[]" type="checkbox" value="4" /> Friday'; 
    if ($i==5) 
     echo ' <input name="repeat_on_week[]" type="checkbox" value="5" /> Saturday'; 
    if ($i==6) 
     echo ' <input name="repeat_on_week[]" type="checkbox" value="6" /> Sunday'; 

} 
+0

Bien que n'étant pas applicable à cette question exacte, je voudrais injecter doucement une extension au code ci-dessus; après le premier 'if', le reste pourrait (devrait) être 'else if' (ou 'elif', je ne suis pas un afficianado php) – KevinDTimm

Répondre

16

Que diriez-vous:

$days = array('Monday', 
       'Tuesday', 
       'Wednesday', 
       'Thursday', 
       'Friday', 
       'Saturday', 
       'Sunday' 
     ); 

for($i = 0; $i < 7; $i++) { 
    echo '<input name = "repeat_on_week[]" type = "checkbox" value = "' . $i . '" />' . $days[$i]; 
} 

Ou utiliser un foreach; il est plus facile sur les yeux et vous ne devez pas déterminer la longueur du tableau: « il doit y avoir une meilleure façon de le faire »

for($days as $i => $day) { 
    echo "<input name = \"repeat_on_week[]\" type = \"checkbox\" value = \"$i\" /> $day"; 
} 

Il est un bon signe que vous pensiez . Cela signifie que vous vous déplacez dans la bonne direction *. Mais je suggérerais aussi de se pencher sur les concepts de tableaux et quand il est bon de les utiliser.

* Un bon programmeur pense toujours son code nul, ce qui est une autre façon de dire qu'un bon programmeur essaie toujours de se perfectionner ou elle-même, ce qui est aussi une autre façon de dire que a good programmer is humble.

+2

+1 pour votre commentaire à la fin. Bien dit. –

0

Soit utiliser une instruction switch ou un tableau avec les chaînes directement.

+0

Qu'est-ce qu'un "arty"? – Nathan

+0

Désolé, tableau ... La correction automatique m'a berné :-) – Eiko

0

Votre code va simplement imprimer chaque ligne une fois, dans l'ordre. Il ne me semble pas que vous ayez besoin d'une boucle.

+0

Eh bien, il y a un autre code dans cette boucle qui le nécessite (à des fins de comparaison, je l'ai laissé de côté pour garder le code plus facile à lire). – kylex

+1

Wow c'est du bon code. – Nathan

+0

@kylex, ah, très bien alors. Toutes les réponses utilisant un tableau fonctionnent alors. – Pops

3

Première façon:

$days = array("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"); 

for ($i=0; $i < 7; $i++) { 
    echo ' <input name="repeat_on_week[]" type="checkbox" value="'.$i.'" /> '.$days[$i]; 
} 

La deuxième façon serait d'utiliser la fonction « date » pour obtenir les noms de semaine à partir du système, mais je suis trop paresseux pour comprendre que le calcul ... vous » d donner horodatages correspondant à la semaine connus, puis faire

date("l", $timestamp); 
4
$days = array(
    "Monday", 
    "Tuesday", 
    "Wednesday", 
    "Thursday", 
    "Friday", 
    "Saturday", 
    "Sunday"); 

for($i=0; $i<7; $i++){ 
    echo ' <input name="repeat_on_week[]" type="checkbox" value="' . $i . '" /> ' . $days[$i]; 
} 
1

Ah, everone a rapidement, mais je préférerais une boucle foreach:

$days = array('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'); 
foreach ($days as $i => $day) { 
     echo " <input name=\"repeat_on_week[]\" type=\"checkbox\" value=\"$i\" /> $day"; 
} 
+0

Y a-t-il une raison technique à utiliser foreach over? (est-ce plus rapide?) – kylex

+0

C'est juste du sucre syntaxique et c'est plus simple. –

+0

Oui, je ne pense pas qu'il y ait un problème de performance.Ne vous inquiétez pas trop de "plus vite", ne vous inquiétez pas de "plus facile à lire après 6 mois d'absence". – Nathan

1

Eh bien ... 4 ans plus tard, mais j'ai quand même décidé de partager une solution aussi :) S'il vous plaît, voir ci-dessous.

for ($i = 0; $i < 7; $i++) { 
    echo '<input name = "repeat_on_week[]" type = "checkbox" value = "' . $i . '" />' . date('l', strtotime('Monday +' . $i . 'days')); 
} 

Espérons que cela aide quelqu'un.

Questions connexes