ここで問題が発生しています。
$arr = array ('1' => 'one');
var_dump(current(array_keys($arr)));
// prints: int(1)
// should print: string(1) "1"
連想配列を作成しようとしていますが、PHP が文字列を整数に変換しています。
一連の <input type="radio"> ボタンのマークアップを生成し、checked 属性を、値が POST リクエストの値と一致するものに適用しています。
$selected = isset($_POST[$this->name]) ? $_POST[$this->name] : null;
foreach ($this->options as $value => $label) {
$html .= "<input type=\"radio\" name=\"{$this->name}\" value=\"$value\"".
($_POST[$this->name] === $value ? ' checked' : '').'>';
}
型比較ではなく、2 つの等号を使用することもできます。ただし、配列が次の場合:
$this->options = array (
'0' => 'No',
'1' => 'Yes'
);
POST 値が設定されていなくても、0 オプションが選択されます。ただし、いずれのラジオ ボタンも null の値を持たないため、ANY ラジオ ボタンは選択しないでください。
編集:これを見つけました:「有効な整数を含む文字列は整数型にキャストされます。たとえば、キー「8」は実際には8の下に格納されます。一方、「08」はそうではないため、キャストされません有効な 10 進整数。」PHP マニュアルに記載されています。とにかくそれを回避する方法があると思いますか?