0

我有一个这样的选择:

$stuff=$this->Database->getItems();
$data['mySelect']=form_multiselect('addedStuff[]', $stuff, '1', 'id="addedStuff" multiple="multiple"');

当我提交表单然后发布选择的所有值时,我有这个:

$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)

获取项目:

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

我的选择在视图中正确显示...

我该如何解决这个问题?

4

2 回答 2

1

您需要将数组的键设置$stuff为您的值,试试这个:

$stuff = $this->Database->getItems();
$stuff = array_combine($stuff,$stuff);
$data['mySelect']=form_multiselect('addedStuff[]', $stuff, '1', 'id="addedStuff" multiple="multiple"');
于 2013-10-13T20:18:40.400 回答
1

我看到两个解决方案。

1)您更改$stuff为具有与值相同的键。

CodeIgniter 的 form_multiselect 就像 form_dropdown 一样生成选项,使得传递的选项列表的键包含相应选项文本的值。因此,在您执行多选之前:

$stuff = array_combine($stuff,$stuff);

2) 因为方法 1 可能会或可能不会弄乱任何发送的数据,所以您保留索引,但根据索引在接收控制器中进行查找。如下:

$stuff=$this->Database->getItems();
$var = $this->input->post('addedStuff');
$var = array_intersect_key($stuff,$var);

第二种方法感觉更安全..

于 2013-10-13T20:24:03.420 回答