0

我在 codeigniter 2.1.3 版中的 form_dropdown 助手有一个奇怪的问题。

以下代码:

print_r($country_options);

echo form_label('Country:','country') . 
form_dropdown('country',$country_options, 0);
...

输出

Array ( [0] => All [Australia] => Australia )

<label for="country">Country:</label>
<select name="country">
<option value="0" selected="selected">All</option>
<option value="Australia" selected="selected">Australia</option>
</select>

我没看到什么?

在 form_dropdown 函数的第三个参数中设置的不是仅选择下拉列表“All”,而是选择两个下拉选项,即使第二个选项的键为“Australia”

4

1 回答 1

0

这是 php 的 in_array 函数的一个特点;不幸的是,我无法向您完全解释它,但它围绕您使用 0 作为键:

form_helper 中的代码是:

$sel = (in_array($key, $selected)) ? ' selected="selected"' : '';

其中 $key = 'Australia' & $selected 实际上是一个数组,array(0=>0);

现在,发生在 php 中的怪异之处是:

任何时候你使用一个会被评估为假的键(即假,0,'')你最终会匹配所有的字符串值。您可以玩弄不同的数组并查看。

所以,按照 Deepanshu 的建议做 & 使用 Array ( [0] => All [1] => Australia )

编辑:更多调查表明原因不是 100% 正确,但解决方案仍然有效。我认为问题只是与数组值相比,字符串被评估为 0

更多信息:为什么 PHP 认为 0 等于字符串?

于 2013-09-14T08:25:58.727 回答