我在表单中有一个选择小部件:
$years = range(14,130);
$this->widgetSchema['age'] = new sfWidgetFormSchema();
foreach (array('from', 'to') as $value)
{
$this->widgetSchema['age'][$value] = new sfWidgetFormChoice(array(
'label' => $value,
'choices' => array_merge(array('' => '-'),array_combine($years,$years))));
}
如果我选择例如14,并且在接收表单的动作中写的是这样的:
var_dump($valores_widgets['age']['from']);
显示0.但我预计14。
有什么想法吗?
此致
哈维
答案 0 :(得分:3)
查看array_merge
的文档:
但是,如果数组包含 数字键,后面的值不会 覆盖原始值,但会 附加。
如果所有数组仅包含 数字键,结果数组是 给定递增键从 零。
快速测试:
maerlyn@biliskner:~$ php --run '$years=range(14,16);var_dump(array_merge(array("" => "-"), array_combine($years,$years)));'
array(4) {
[""]=>
string(1) "-"
[0]=>
int(14)
[1]=>
int(15)
[2]=>
int(16)
}
因此,您的$ years数组在合并期间会重新编制索引。使用+
运算符时:
maerlyn@biliskner:~$ php --run '$years=range(14,16);var_dump(array("" => "-") + array_combine($years,$years));'
array(4) {
[""]=>
string(1) "-"
[14]=>
int(14)
[15]=>
int(15)
[16]=>
int(16)
}