久しぶりにPHPをさわる際、フォームで送信された「0」の選択値が自前の必須チェックで引っかかったりするときに何でだっけとなるので自分用にまとめました。
以下の3パターンで検証を行いました。
- 0,1などの値を==で比較したとき
- 1,2などの値を==で比較したとき
- 0,1などの値を===で比較したとき
以下は検証に使ったPHPのコードです(テーブルタグは除去済み)
$arr = array(null, 0, 1, '', '0', '1', true, false); $name_arr = array("null", "0", "1", "''", "'0'", "'1'", "true", "false"); $arr2 = array(null, 1, 2, '', '1', '2', true, false); $name_arr2 = array("null", "1", "2", "''", "'1'", "'2'", "true", "false"); foreach ($arr as $index1 => $value1) { if ($index1 == 0) { foreach ($name_arr as $name_val) { echo $name_val; } } foreach ($arr as $index2 => $value2) { if ($index2 == 0) { echo $name_arr[$index1]; } echo ($value1 == $value2); } }
以下のページで実際に動かしました。

PHPの==による比較ついて
リンク先で色々書きましたがまとめると0はnullや空文字と==で比較した際に真となってしまうので注意しましょうということになります。
私の場合はフォームで使用する「なし」「あり」の値は「1」「2」で管理するのが好みです。
サンプルのページ作るのが思ってたより手間だったので今回はおしまい。