2010-06-10 7 views
7

Tengo el siguiente for-loop. Utiliza los valores 0-6 de lunes a domingo, respectivamente.¿Una forma más condensada de hacer el siguiente ciclo?

¿Hay una manera más condensada de hacer esto? A diferencia de la lista 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

Aunque no se aplica a esta pregunta exacta, me gustaría insertar suavemente una expansión en el código anterior; después del primer 'si', el resto podría (debería) ser 'else if' (o 'elif', no soy php afficianado) – KevinDTimm

Respuesta

16

¿Qué tal:

$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]; 
} 

O utilizar un foreach; que es más fácil en los ojos y no tener que averiguar la longitud de la matriz: "tiene que haber una mejor manera de hacer esto"

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

Es una buena señal de que el pensamiento . Significa que se está moviendo en la dirección correcta *. Pero también le sugiero que revise los conceptos de arreglos y cuándo es bueno usarlos.

* Un buen programador siempre piensa en su código chupa, que es otra forma de decir que un buen programador siempre está tratando de mejorar a sí mismo, que es también otra forma de decir que a good programmer is humble.

+2

+1 para su comentario al final. Bien dicho. –

0

O bien utilizar una sentencia switch o una matriz con las cuerdas directamente.

+0

¿Qué es un "arty"? – Nathan

+0

Lo siento, matriz ... La corrección automática me engañó :-) – Eiko

0

Su código simplemente va a imprimir cada línea una vez, en orden. No me parece que necesites un bucle en absoluto.

+0

Bueno, hay otro código en ese bucle que lo requiere (para fines de comparación, lo dejé fuera para que el código sea más fácil de leer). – kylex

+1

Vaya, ese es un código dulce. – Nathan

+0

@kylex, ah, muy bien entonces. Cualquiera de las respuestas usando una matriz funciona, entonces. – Pops

3

Primera forma:

$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 segunda manera sería utilizar la función de "fecha" para obtener los nombres de lunes a viernes de sistema, pero soy demasiado perezoso para averiguar que el cálculo que ...' d darle indicaciones horarias coincidentes entre semana conocidos, y luego hacer

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, todos pasaron consiguió esto de manera rápida, pero yo preferiría un bucle 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

¿Existe alguna razón técnica para utilizar Foreach? (¿es más rápido?) – kylex

+0

Es azúcar sintáctico y es más simple. –

+0

Sí, no creo que haya ningún problema de rendimiento.No se preocupe tanto por "más rápido", preocúpese por "más fácil de leer después de 6 meses de distancia". – Nathan

1

Bueno ... 4 años después, pero aún así decidí compartir una solución :) Por favor, vea abajo.

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

Espero que ayude a alguien.

Cuestiones relacionadas