for($i = 0; $i <= 24; $i += 0.25) {
ここでは、97 回の反復のシーケンスがあります。それは等しく
range(0, 96);
次に、これらのステップのいずれかを特定の番号にマップします。
$map = function($step) {
return $step * 0.25;
}
たとえば、次のシーケンスが作成されます。
0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, ... , 23, 23.25, 23.5, 23.75, 24
したがって、これらの数字ではなく、良い月だけが必要です。ステップ(小数の代わりに)をより簡単に実行すれば、それらを計算できます。
month: floor($step / 4) - division (integer)
weeks: $step % 4 - modulo (integer)
または、それをテキストに変換するマッピング関数として:
$map = function ($step) {
$month = floor($step / 4);
$week = $step % 4;
$buffer = '';
if ($month) {
$buffer .= "$month month";
}
if ($week) {
if ($month) {
$buffer .= ' and ';
}
$buffer .= "$week week" . ($week == 1 ? '' : 's');
}
return $buffer;
};
例えば:
$map(0) # (empty)
$map(1) # 1 week
$map(10) # 2 month and 3 weeks
$map(95) # 23 month and 3 weeks
$map(96) # 24 month
したがって、範囲をキーとして値にマップするだけで、これらの値を使用して選択ボックスの標準出力を実行できます。
$list = range(0, 96);
$selected = 12; // $_SESSION['age']
echo "Age : \n<select id='age' name ='age' class='selecta'>\n";
foreach ($list as $value)
{
$label = $map($value);
printf(" <option value='%d'%s>%s</option>\n", $value, $value === $selected ? " selected='selected'" : '', $label);
}
echo "</select>\n";
これにより、出力が得られます(Demo):
Age :
<select id='age' name ='age' class='selecta'>
<option value='0'></option>
<option value='1'>1 week</option>
<option value='2'>2 weeks</option>
<option value='3'>3 weeks</option>
<option value='4'>1 month</option>
...
<option value='11'>2 month and 3 weeks</option>
<option value='12' selected='selected'>3 month</option>
<option value='13'>3 month and 1 week</option>
...
<option value='50'>12 month and 2 weeks</option>
<option value='51'>12 month and 3 weeks</option>
<option value='52'>13 month</option>
<option value='53'>13 month and 1 week</option>
<option value='54'>13 month and 2 weeks</option>
...
<option value='92'>23 month</option>
<option value='93'>23 month and 1 week</option>
<option value='94'>23 month and 2 weeks</option>
<option value='95'>23 month and 3 weeks</option>
<option value='96'>24 month</option>
</select>