Более сжатый способ сделать следующий цикл?

У меня есть следующий для цикла. Это использует значения форма 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
задан Jeff 10 June 2010 в 18:20
поделиться

6 ответов

Как насчет:

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

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

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

16
ответ дан 6 December 2019 в 07:05
поделиться

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

$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" для получения названий дней недели из системы, но мне лень вычислять эти вычисления ... вы должны указать ему метки времени, соответствующие известным дням недели, а затем сделать

date("l", $timestamp);
3
ответ дан 6 December 2019 в 07:05
поделиться

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

0
ответ дан 6 December 2019 в 07:05
поделиться
$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];
}
4
ответ дан 6 December 2019 в 07:05
поделиться

Ах, все быстро разобрались, но я бы предпочел цикл 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";
}
1
ответ дан 6 December 2019 в 07:05
поделиться

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

0
ответ дан 6 December 2019 в 07:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: