使用Cakephp在select中显示重复的选项值

使用Cakephp在select中显示重复的选项值,cakephp,select,duplicates,options,Cakephp,Select,Duplicates,Options,使用Cakephp 1.3中的form helper,我试图显示一个列表(下拉列表),其中包含几个重复的值字段(当然在标记中),但cake似乎不想让我这样做,只输出每个值的第一次出现 例如,下面是$form->input的“options”数组: array( 0 => 'description 0', 0 => 'description 1', 0 => 'description 2', 1 => 'description 3' );

使用Cakephp 1.3中的form helper,我试图显示一个列表(下拉列表),其中包含几个重复的值字段(当然在
标记中),但cake似乎不想让我这样做,只输出每个值的第一次出现


例如,下面是$form->input的“options”数组:

array(
    0 => 'description 0',
    0 => 'description 1',
    0 => 'description 2',
    1 => 'description 3'
);

这将输出如下内容:

<select>
    <option value="0">description 0</option>
    <option value="1">description 3</option>
</select>

说明0
说明3
我在寻找这个结果:

<select>
    <option value="0">description 0</option>
    <option value="0">description 1</option>
    <option value="0">description 2</option>
    <option value="1">description 3</option>
</select>

说明0
说明1
说明2
说明3

干杯,

Nicolas.

因此,我担心问题比我最初想象的要严重,这是由PHP造成的,PHP(显然)不允许重复密钥

下面是我的解决方案(如果有人感兴趣):

  • 创建一个新的帮助程序扩展FormHelper
  • 将表单帮助程序中的原始函数
    复制到新帮助程序中
  • 只需将这一行更改为:
    foreach($name=>$title形式的元素){

    by:
    foreach($title=>$name形式的元素){
  • 完成!
  • 这不是最好的解决方案,因为如果要将cakephp更新到最新版本,那么必须再次复制/粘贴该函数,并执行相同的操作


    如何使用它:

  • 以另一种方式声明您的
    选项
    数组:
    数组('description'=>'键);
  • 在您看来,与其执行
    $form->input
    ,不如执行
    $yourheloper->input


  • Nicolas。

    当然,在PHP中,在数组中不能使用同一个键两次

    但正如在这个蛋糕上所说的,我们知道如何在2.x中制作具有相同值的多个键:

    $options = array(
        ...
        array('name' => 'United states', 'value' => 'USA'),
        array('name' => 'USA', 'value' => 'USA'),
     );
    
     $html = $this->Form->select('field', $options);
    
    导致

    <option value="USA">United states</option>
    <option value="USA">USA</option>
    
    美国
    美国
    
    正如你所看到的,你在这里得到了你的价值两次(当然更多)

    请参阅表单帮助器类本身的文档(cake2.x)。 不过,不确定1.3是否已经支持它

    如果你升级,你将能够利用所有的蛋糕的最新魔术