1

我正在使用 zend 表单元素创建一个选择框。现在我有一个要显示在选择框中的值列表,这些值可能具有相同的值但不同的标题。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,依此类推。

有没有办法使这项工作?

提前致谢。

4

3 回答 3

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;
}

可能的解决方案可能是在选项中添加一个后缀,该后缀是您在分析时切断的随机字符串。您还可以创建不同的选项并使用映射数组对其进行映射。

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

带数组

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

$trueValue = $mapping[$formOption];
于 2012-06-05T14:21:54.730 回答
0

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

$StaffContractTypeData=array();//我要在select中的数据选项

    $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
    }
于 2013-01-15T12:21:26.773 回答
0

正如 TDBishop 所建议的,我对代码做了一些小的改动。

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

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

于 2012-06-05T17:32:11.040 回答