使用zend形式的addMultioption添加具有相同值但具有不同标题的选项

时间:2012-06-05 08:00:38

标签: php zend-framework zend-form zend-form-element

我正在使用zend表单元素创建一个选择框。现在我有一个要在selectbox中显示的值列表,它们可能具有相同的值但具有不同的标题。 Zend表单不会显示具有相同值的两个选项。我的代码如下:

$this->addMultiOption('','-- Select ****** --');
foreach($options as $option) {
    $this->addMultiOption($option->value,$option->caption);
}

这里选项的值可以是相同的 1,2,3,4,1,2,6,7,8,2,3,2,1 ... 选项的标题是不同的 AAA,BBB,CCC,DDD,EEE,FFF

aaa可以有值1,bbb也可以有值1,在这种情况下它只显示bbb等等。

有没有办法让这项工作?

提前致谢。

3 个答案:

答案 0 :(得分:2)

您可以在此处查看addMultiOption的实现。您会注意到它会将您的选项强制转换为字符串,然后强制它上面的值,覆盖您发现的先前值。

/**
 * Add an option
 *
 * @param  string $option
 * @param  string $value
 * @return Zend_Form_Element_Multi
 */
public function addMultiOption($option, $value = '')
{
    $option  = (string) $option;
    $this->_getMultiOptions();
    if (!$this->_translateOption($option, $value)) {
        $this->options[$option] = $value;
    }

    return $this;
}

Possibile解决方案可能是为选项添加后缀,该选项是您在分析时切断的随机字符串。您还可以创建不同的选项,并使用映射数组映射它们。

<select>
    <option value="car">Car</option>
    <option value="toy">Toy</option>
<select>

with array

$mapping = array(
    'car' => 'car',
    'toy' => 'car'
);

$trueValue = $mapping[$formOption];

答案 1 :(得分:0)

根据TDBishop的建议,我对代码进行了细微的修改。

$this->addMultiOption('','-- Select ****** --');
foreach($options as $option) {
    $this->addMultiOption($option->value."_".$option->caption,$option->caption);
}

在这里,正如我之前提到的那样,标题总是不同的,所以即使'值'是相同的,添加标题后缀也可以使每个新值不同。现在,在分析数据时,我可以使用explode来解析值并使用它们。 :)

答案 2 :(得分:0)

这是我更改值的代码 - 稍后我将只评估ZEND控制器或其他地方的字符串的第一部分。 希望能帮助到你。

$ StaffContractTypeData = array(); //我想要的数据选项

    $options=array();//temp storage array
    $i=0;//iteration counter

    $fk_id_staff_contract_type->addMultiOption("","");//one empty option in my select 

    foreach($StaffContractTypeData as $v) {

        if(in_array($v["code"], $options)){//append the iterator value
            $fk_id_staff_contract_type->addMultiOption($v["code"].$i,$v["label"]);
        }else{
            $fk_id_staff_contract_type->addMultiOption($v["code"],$v["label"]);
            array_push($options, $v["code"]);
        }
        $i++;//change iterator value
    }