我有这样的选择:
$stuff=$this->Database->getItems();
$data['mySelect']=form_multiselect('addedStuff[]', $stuff, '1', 'id="addedStuff" multiple="multiple"');
当我提交表单然后POST选择的所有值我有:
$var = $this->input->post('addedStuff');
var_dump($var);
var_dump显示:
array (size=3)
0 => string '0' (length=1)
1 => string '1' (length=1)
2 => string '2' (length=1)
我的问题是我不想拥有数字字符串,我想要所选项目的文本。他们应该是这样的:
array (size=3)
0 => string 'IMP 291B' (length=8)
1 => string 'IMP 9891' (length=8)
2 => string 'IMP 492' (length=7)
getItems:
function getItems()
{
$query = $this->db->query(sprintf (GET_PRINTERS_MODELS));
$results=array();
foreach ($query->result_array() as $row)
{
array_push ($results, $row['modelo']);
}
return $results;
}
我的选择在视图中正确显示...
我该如何解决这个问题?
答案 0 :(得分:1)
您需要将$stuff
数组的键设置为您的值,请尝试以下操作:
$stuff = $this->Database->getItems();
$stuff = array_combine($stuff,$stuff);
$data['mySelect']=form_multiselect('addedStuff[]', $stuff, '1', 'id="addedStuff" multiple="multiple"');
答案 1 :(得分:1)
我看到两种解决方案。
1)您更改$stuff
以使密钥与值相同。
CodeIgniter的form_multiselect就像form_dropdown一样生成选项,使得传递的选项列表的键包含相应选项文本的值。 你做多重选择之前的Ergo:
$stuff = array_combine($stuff,$stuff);
2)因为方法1可能会或可能不会弄乱任何已发送的数据,所以保留索引,但是根据索引在接收控制器中进行查找。如下:
$stuff=$this->Database->getItems();
$var = $this->input->post('addedStuff');
$var = array_intersect_key($stuff,$var);
第二种方法感觉更安全..