Более сжатый способ сделать следующий цикл? - PullRequest
7 голосов
/ 10 июня 2010

У меня есть следующий цикл for.Используются значения 0-6, соответственно, форма понедельник-воскресенье.

Есть ли более сжатый способ сделать это?В отличие от перечисления 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';

}

Ответы [ 7 ]

16 голосов
/ 10 июня 2010

Как насчет:

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

Или использовать foreach;это проще для глаз, и вам не нужно вычислять длину массива:

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

Это хороший признак того, что вы подумали "должен быть лучший способ сделать это! ".Это означает, что вы двигаетесь в правильном направлении *.Но я бы также посоветовал прояснить концепции массивов и, когда это полезно, использовать их.

* Хороший программист всегда думает, что его или ее код отстой, что является еще одним способомговорить, что хороший программист всегда пытается улучшить себя, что также является другим способом сказать, что хороший программист скромен .

4 голосов
/ 10 июня 2010
$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];
}
3 голосов
/ 10 июня 2010

Первый способ:

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

Второй способ - использовать функцию «дата» для получения названий дней недели из системы, но мне лень выяснять эти вычисления ... выдал бы ему метки времени, соответствующие известным дням недели, а затем сделал бы

date("l", $timestamp);
1 голос
/ 02 сентября 2014

Ну ... 4 года спустя, но я все же решил поделиться решением :) Пожалуйста, смотрите ниже.

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

Надеюсь, это кому-нибудь поможет.

1 голос
/ 10 июня 2010

Ах, когда-нибудь это получалось быстро, но я бы предпочел цикл 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 голосов
/ 10 июня 2010

Ваш код просто распечатывает каждую строку по порядку. Мне не кажется, что вам вообще нужна петля.

0 голосов
/ 10 июня 2010

Либо используйте оператор switch, либо массив со строками напрямую.

...