Codeigniter奇怪的form_dropdown bug混合索引

时间:2013-09-14 07:31:22

标签: php codeigniter codeigniter-2 codeigniter-form-helper

我在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”

,也会选择这两个下拉选项

1 个答案:

答案 0 :(得分:0)

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

form_helper中的代码是:

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

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

现在,php出现的奇怪之处在于:

无论何时使用将评估为false的键(即false,0,''),您最终都会匹配所有字符串值。您可以使用不同的数组并查看。

所以,正如Deepanshu推荐的那样。使用Array([0] =&gt; All [1] =&gt; Australia)

编辑:更多调查显示原因不是100%正确,但解决方案仍然有效。我认为问题只是在与数组值

进行比较时,字符串被评估为0

更多信息:Why does PHP consider 0 to be equal to a string?