0

ここで問題が発生しています。

$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 マニュアルに記載されています。とにかくそれを回避する方法があると思いますか?

4

2 に答える 2

0

@ Twisted1919が言ったように、明らかな解決策は、チェックで型キャストすることです。

$selected = isset($_POST[$this->name]) ? $_POST[$this->name] : null;
foreach ($this->options as $value => $label) {
   $html .= "<input type=\"radio\" name=\"{$this->name}\" value=\"$value\"".
            ($selected === (string) $value ? ' checked' : '').'>';
}

ありがとう!

于 2013-06-27T22:34:50.570 に答える
0

不可能です。

マニュアルから:

A key may be either an integer or a string. If a key is the standard representation
of an integer, it will be interpreted as such (i.e. "8" will be interpreted as 8, 
while "08" will be interpreted as "08").
于 2013-06-27T22:35:32.533 に答える