$array=array("未設定","値1","値2","値3","値4","値5"); $a=""; //空
上記の条件で、下記のようにforeachを使ってradioボタンを設置した時。
foreach($array as $row){ if($row==$a){$s="checked";}else{$s="";} echo "<input type='radio' value='{$row}' name='status' $s>{$row}"; } コード
結果
<input type='radio' value='未設定' name='status'>未設定
<input type='radio' value='値1' name='status'>値1
<input type='radio' value='値2' name='status'>値2
<input type='radio' value='値3' name='status'>値3
<input type='radio' value='値4' name='status'>値4
<input type='radio' value='値5' name='status'>値5
$aは空ですのでcheckedが反映されることはなく、先頭のradioが自動的にcheckedになることもありません。
次に
for文で下記のようにradioボタンを設置した時。
$aは空ですのでcheckedが反映されることはないのですが
デフォルトで先頭のradioが自動的にchecked状態になります。
しかし、ソース上ではcheckedはついていません。ブラウザの仕様でしょうか
for($i=0; $i<count($array); $i++){ if($i==$a){$s="checked";}else{$s="";} echo "<input type='radio' value='{$array[$i]}' name='status' $s>{$array[$i]}"; } コード
結果
<input type='radio' value='未設定' name='status'>未設定
<input type='radio' value='値1' name='status'>値1
<input type='radio' value='値2' name='status'>値2
<input type='radio' value='値3' name='status'>値3
<input type='radio' value='値4' name='status'>値4
<input type='radio' value='値5' name='status'>値5
次に未設定という値をスキップするために
$iを1から始めると先頭のradioは自動的にcheckedにはなりません。
for($i=1; $i<count($array); $i++){ if($array[$i]==$a){$s="checked";}else{$s="";} echo "<input type='radio' value='{$array[$i]}' name='status' $s>{$array[$i]}"; } コード
結果
<input type='radio' value='値1' name='status'>値1
<input type='radio' value='値2' name='status'>値2
<input type='radio' value='値3' name='status'>値3
<input type='radio' value='値4' name='status'>値4
<input type='radio' value='値5' name='status'>値5
なぜそういう挙動になるのでしょうか
一番最後の配列の最初をスキップしてradioボタンを生成して、$aが空の場合、先頭のradioがデフォルトでcheckedになるようにするにはどうするといいでしょうか
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/08 02:09