我正在尝试在PHP中编写一个for循环,以添加到HTML <select>
标记下拉列表中,以便人们选择他们的出生月份。
这是我无法正常工作的代码:
<p>
<label for="signup_birth_month">Birthday:</label>
<select name="signup_birth_month" id="signup_birth_month">
<option value="">Select Month</option>
<?php
for ($i = 1; $i <= 12; $i++)
{
$month_name = date('F', mktime(0, 0, 0, $i, 1, 2011));
echo '<option value="'.$month_name.'"'.$month_name.'></option>';
}
?>
</select>
</p>
如何编写一个返回年份中每个月名称的for循环?
答案 0 :(得分:10)
您需要引用value
密钥:
echo "<option value=\"" . $month_name . "\">" . $month_name . "</option>";
另外,我可能更喜欢这样的东西:
$months = array("Jan", "Feb", "Mar", ..., "Dec");
foreach ($months as $month) {
echo "<option value=\"" . $month . "\">" . $month . "</option>";
}
当您知道应该是什么时,您会对date
和mktime
进行所有不必要的调用,这似乎很奇怪。
这个数组版本具有相同的行数,并且在意图上似乎更清晰(至少对我而言)。
答案 1 :(得分:3)
for($iM =1;$iM<=12;$iM++){
echo date("M", strtotime("$iM/12/10"));}
答案 2 :(得分:1)
您是否在选择框中看到月份名称?
我认为这应该可以解决问题:
echo "<option value=\"" . $month_name . "\">" . $month_name . "</option>";
答案 3 :(得分:1)
很简单!
function getLocalMonthName($locale, $monthnum)
{
setlocale (LC_ALL, $locale.".UTF-8");
return ucfirst(strftime('%B', mktime(0, 0, 0, $monthnum, 1)));
}
print getLocalMonthName("pt_BR", 1); // returns Janeiro
答案 4 :(得分:0)
我认为你应该修复HTML部分。
echo '<option value="'.$month_name.'">'.$month_name.'</option>';
别忘了在
之前设置默认时区date_default_timezone_set('Your/Timezone');
否则你会得到一个E_WARNING for date()和mktime()(如果设置了error_reporting(E_ALL))。 请查看http://www.php.net/manual/en/timezones.php获取有效时区。
或者,您也可以使用类似
的内容$i = 1;
$month = strtotime('2011-01-01');
while($i <= 12)
{
$month_name = date('F', $month);
echo '<option value="'. $month_name. '">'.$month_name.'</option>';
$month = strtotime('+1 month', $month);
$i++;
}
但for循环很好。
答案 5 :(得分:0)
非常简单的解决方案:
print '<option value="" disabled selected>Select month</option>';
for ( $i = 1; $i <= 12; $i ++ ) {
print '<option value="' . $i . '">' . date( 'F', strtotime( "$i/12/10" ) ) . '</option>';
}
答案 6 :(得分:0)
PHP代码打印出每个月的名称:
<?php
date_default_timezone_set('America/New_York');
for($i=1; $i<=12; $i++){
$month = date('F', mktime(0, 0, 0, $i, 10));
echo $month . ",";
// It will print: January,February,.............December,
}
?>
答案 7 :(得分:0)
嘿,如果您只需要几个月的时间,又不想列出几个月的数组,则可以尝试一下
<select>
<?php for($i = 1; $i <= 12; $i++){ ?>
<option value="<?= $i ?>"><?= date('M', strtotime('2020-'.$i.'-01')) ?></option>
<?php } ?>
</select>
答案 8 :(得分:0)
您可以使用此功能根据月份格式循环浏览月份。
function months($month_format="F"){
$months = [];
for ($i = 1; $i <=12; $i++) {
$months[] = date($month_format, mktime(0,0,0,$i));
}
return $months;
}
var_dump(months());
//returns
array(12) {
[0]=>
string(7) "January"
[1]=>
string(8) "February"
[2]=>
string(5) "March"
[3]=>
string(5) "April"
[4]=>
string(3) "May"
[5]=>
string(4) "June"
[6]=>
string(4) "July"
[7]=>
string(6) "August"
[8]=>
string(9) "September"
[9]=>
string(7) "October"
[10]=>
string(8) "November"
[11]=>
string(8) "December"
}
var_dump(months("M"))
//returns
array(12) {
[0]=>
string(3) "Jan"
[1]=>
string(3) "Feb"
[2]=>
string(3) "Mar"
[3]=>
string(3) "Apr"
[4]=>
string(3) "May"
[5]=>
string(3) "Jun"
[6]=>
string(3) "Jul"
[7]=>
string(3) "Aug"
[8]=>
string(3) "Sep"
[9]=>
string(3) "Oct"
[10]=>
string(3) "Nov"
[11]=>
string(3) "Dec"
}
我个人使用此函数将循环循环到关联数组中,并获取html select甚至定位所选值。
function html_selected($selected_option, $html_select_attributes, $options_and_values_array, $has_placeholder=false){
$c = count($options_and_values_array);
if ($has_placeholder){
$c--;
}
if ($c===0){
return "";
}
$select="<select $html_select_attributes>";
foreach ($options_and_values_array as $k=>$v){
if ((string)$k===(string)$selected_option){
$f = "selected";
}else{
$f = "";
}
if (strpos($k,'"') !==-1){
$dl = "'";
}else{
$dl = '"';
}
$select.="<option value=$dl".$k."$dl $f>$v</option>";
}
$select.="</select>";
return $select;
}
所以,你们在一起
$months = months();
echo html_selected("April","class='select-month'",array_combine($months,$months));
//returns
<select class='select-month'><option value='January' >January</option><option value='February' >February</option><option value='March' >March</option><option value='April' selected>April</option><option value='May' >May</option><option value='June' >June</option><option value='July' >July</option><option value='August' >August</option><option value='September' >September</option><option value='October' >October</option><option value='November' >November</option><option value='December' >December</option></select>