symfony:关于选择小部件的问题

时间:2010-07-09 13:25:32

标签: php select input symfony1

我在表单中有一个选择小部件:

$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。

有什么想法吗?

此致

哈维

1 个答案:

答案 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)
}