我正在使用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等等。
有没有办法让这项工作?
提前致谢。
答案 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
}