我使用以下内容基本上打印一个下拉框,显示所有小时,增量为30分钟:
$start = '12:00AM';
$end = '11:59PM';
$interval = '+30 minutes';
$start_str = strtotime($start);
$end_str = strtotime($end);
$now_str = $start_str;
echo '<select name="doors_open">';
while($now_str <= $end_str){
echo '<option value="' . date('h:i A', $now_str) . '">' . date('h:i A', $now_str) . '</option>';
$now_str = strtotime($interval, $now_str);
}
echo '</select>';
但是,我希望在页面下方的另一个字段中执行两次...问题是,如何重置循环?
这是我尝试但不起作用的地方:
echo '<select name="event_start">';
reset($now_str);
reset($end_str);
while($now_str <= $end_str){
echo '<option value="' . date('h:i A', $now_str) . '">' . date('h:i A', $now_str) . '</option>';
$now_str = strtotime($interval, $now_str);
}
echo '</select>';
答案 0 :(得分:3)
在您的情况下,您只需将初始值重新分配给$now_str
,这样您的循环就可以再次运行。由于您的$start_str
变量包含它,您可以在第一次循环后将其重新分配给$now_str
。
$now_str = $start_str;
reset
函数实际上重置了一个用于循环的数组内部指针,这不是这里的情况。
注意:我建议使用辅助函数作为@ComFreek,以避免重复代码。
答案 1 :(得分:2)
reset()
重置数组的内部游标。这与你想要实现的完全不同。
您当然可以简单地复制代码,但这既不是好的代码设计也不是DRY。
您可以做的最好的事情是将整个HTML生成放入辅助函数中:
function genSelect($selectName, $start, $end, $interval) {
$str = "<select name='$selectName'>";
$start_str = strtotime($start);
$end_str = strtotime($end);
$now_str = $start_str;
while($now_str <= $end_str){
$str .= '<option value="' . date('h:i A', $now_str) . '">' . date('h:i A', $now_str) . '</option>';
$now_str = strtotime($interval, $now_str);
}
$str .= '</select>';
return $str;
}
然后,您可以根据需要随时调用它:
echo genSelect('doors_open', '12:00AM', '11:59PM', '+30 minutes');
您也可以考虑缓存结果:
$doorsOpenHtml = genSelect('doors_open', '12:00AM', '11:59PM', '+30 minutes');