フォームなどで生年月日を入力してもらうときに
テキストにするか、プルダウンにするか悩んだすえ
やっぱりプルダウンのほーが使いやすいかと思ったので、
今回は生年月日のプルダウンをPHPで自動生成するやり方をメモ。

サンプル

PHP記述

西暦 
//年のプルダウン
<select name="year">
      <option value="">選択</option>
<?php
for ($y=1900;$y<date(Y)+1;$y++){  //(最小値;現在の年;$y++)
	$sel="";
    //選択された値があれば$selにselected="selected"を格納
	if($_SESSION["year"] == $y) { $sel = "selected='selected'"; }
    //出力
       print '<option value="'.$y.'"'.$sel.'>' . $y . "</option>\n";
}
?>
</select>年
//月のプルダウン
<select name="mon">
        <option value="">選択</option>
<?php
for ($m=01;$m<=12;$m++){  //(最小値;最大値;$m++)
	$sel = "";
        //選択された値があれば$selにselected="selected"を格納
	if($_SESSION["mon"] == $m) { $sel = "selected='selected'"; }
        //出力
         print '<option value="'.sprintf("%02d",$m).'"'.$sel.'>' . sprintf("%02d",$m) . "</option>\n";
}
?>
</select>月 
//日のプルダウン
<select name="day">
          <option value="">選択</option>
<?php
	for ($d=01;$d<=31;$d++){  //(最小値;最大値;$d++)
	$sel = "";
        //選択された値があれば$selにselected="selected"を格納
	if($_SESSION["day"] == $d) { $sel = "selected='selected'"; }
        //出力
        print '<option value="'.sprintf("%02d",$d).'"'.$sel.'>' . sprintf("%02d",$d) . "</option>\n";
}
?>
</select> 日

てな感じでOK。

sprintf(“%02d”,$m)などの部分に使っている
sprintf()関数は、文字列を指定書式へ整形する関数です。

■指定書式の例

  • 「%s」:文字列を出力
  • 「%d」:数字を出力
  • 「%02d」:2桁の数字を出力します。数字が2桁に満たない場合には0で埋めます。(例:1→01)
  • 「%.2f」:小数点2桁までを出力します。(例:3.14159→3.14)

つまりsprintf(“%02d”,$m)という部分は
1/2/3/…..10/11/12/
 ↓ 上記の書式を変換
01/02/03/…..10/11/12/
というふうに頭に0を挿入する場合に必要になります。