Codeigniter:result_array()到form_multiselect()

时间:2014-05-27 15:10:05

标签: php arrays forms codeigniter

我正在提取一个查询的result_array()并将该数组作为要在form_multiselect()中选择的字段。我似乎无法弄清楚为什么多选显示数组索引后跟每个查询结果。这是我的数组的问题还是有form_multiselect选项我缺少数组索引不显示?

我的代码如下:

public function get_tags() {
    $this->db->select('tag_name');
    $this->db->distinct();
    $this->db->from('offers_tags');

    $query = $this->db->get();

    $tags = $query->result_array();

    return $tags;  
}

我的控制器:

$this->data['tags']=$this->offer_model->get_tags();

我的观点:

<div class="control-group">
            <?= form_label('Tags: ', 'tag_targets', $label_attr);?>

            <div class="controls">
                <?= form_multiselect('tag_targets[]',$tags,'','id="geo-select"');?>
            </div>
</div>

2 个答案:

答案 0 :(得分:0)

也许你的参数顺序错了。

  

第一个参数将包含字段的名称,第二个参数   参数将包含一个关联的选项数组,第三个   参数将包含您希望选择的值   http://ellislab.com/codeigniter/user-guide/helpers/form_helper.html

如果你不确定

,你也可以var_dump数组来检查值

答案 1 :(得分:0)

我认为您没有正确指定选项。http://ellislab.com/codeigniter/user-guide/helpers/form_helper.html

你应该指定这样的选项:

$tags = array(
    'tag1Value'  => 'tag1Name',
    'tag2Value'  => 'tag2Name',
    'tag3Value'  => 'tag3Name',
    'tag4Value'  => 'tag4Name'
);

但是,您从get_tags函数返回的内容是:

array(
    0 => array('tag_name'=> 'Tag1'),
    1 => array('tag_name'=> 'Tag2'),
    2 => array('tag_name'=> 'Tag3')
)

每个结果都是一个包含数据包的单独数组。

您可以通过循环浏览项目并创建新数组,将结果转换为form_multiselect所需的格式。在get_tags功能中,您可以执行以下操作。

$tags = array();
foreach ($query->result_array() as $row)
{
   $tags[$row['tag_name']] = $row['tag_name'];
}
return $tags;