【问题标题】:Using foreach in codeigniter view to generate select options在 codeigniter 视图中使用 foreach 生成选择选项
【发布时间】:2014-09-05 10:30:14
【问题描述】:

我使用 codeigniter 生成一些 html 选项,但我只得到一个结果,第一个结果来自表。

这是我的控制器

public function edit_event($id = 0){
    $id = $this->uri->segment(3);
    $current_id = $this->ion_auth->get_user_id();
    $data['data'] = $this->as->the_event_edit($id);
    $data['groups'] = $this->as->the_groups_list($current_id);
    $this->load->view('editevent',$data);
    }

这是我的模特

public function the_groups_list($current_id){
    $query = $this->db->get_where('all_groups', array('group_owner' => $current_id));
    foreach ($query->result() as $row)
    {
    $data = array(
               'group_title' => $row->group_title,
               'group_name' => $row->group_name,
               'group_owner' => $row->group_owner
          );  
          return $data;
    }
    }

这是另一个模型

public function as_event_edit($id){
    $query = $this->db->get_where('all_scheduled_messages', array('id' => $id));
    foreach ($query->result() as $row)
    {
    $data = array(
               'as_title' => $row->as_title,
               'as_event_name' => $row->as_event_name,
               'as_owner' => $row->as_owner,
               'as_type' => $row->as_type,
               'as_target_dataset' => $row->as_target_dataset,
               'as_timestamp' => $row->as_timestamp,
               'as_time' => $row->as_time,
               'as_day' => $row->as_day
          );  
          return $data;
    }
    }

然后我在视图中使用$groups['group_title'],即使我有来自其他行的 4 个组标题,也只会显示第一个组标题。

我如何返回并传递一个数组,然后我可以将其传递给视图,以便使用 foreach 迭代和显示组标题?

【问题讨论】:

  • 使用$data[] = array(.... 而不是$data = array(
  • 我应该如何在视图中访问它?

标签: php codeigniter


【解决方案1】:

在您的模型中,您不是在创建多维数组。您需要使用计数器添加键:

$data = array();
$i=0;
foreach ($query->result() as $row){

  $data[$i]['as_title'] = $row->as_title;
  $data[$i]['as_event_name'] = $row->as_event_name;
  $data[$i]['as_owner'] = $row->as_owner;
  $data[$i]['as_type'] = $row->as_type;
  $data[$i]['as_target_dataset'] = $row->as_target_dataset;
  $data[$i]['as_timestamp'] = $row->as_timestamp;
  $data[$i]['as_time'] = $row->as_time;
  $data[$i]['as_day'] = $row->as_day;

  $i++;

);  
return $data;

或者使用传入数组的key

$data = array();
foreach ($query->result() as $id => $row){

  $data[$id]['as_title'] = $row->as_title;
  $data[$id]['as_event_name'] = $row->as_event_name;
  $data[$id]['as_owner'] = $row->as_owner;
  $data[$id]['as_type'] = $row->as_type;
  $data[$id]['as_target_dataset'] = $row->as_target_dataset;
  $data[$id]['as_timestamp'] = $row->as_timestamp;
  $data[$id]['as_time'] = $row->as_time;
  $data[$id]['as_day'] = $row->as_day;

);  
return $data;

【讨论】:

    【解决方案2】:

    将模型从 $data = 更改为 $data[] = 以插入每一行,而不仅仅是一行。

    在您的视图中循环遍历组,如下所示:

    foreach ($data as $group) {
        echo "Title" . $groups['group_title'];
    }
    

    RTM:Adding Dynamic Data to the View

    在控制器中:将您的 $data['data'] 重命名为 $data['event']

    $data['event'] = $this->as->the_event_edit($id);
    $data['groups'] = $this->as->the_groups_list($current_id);
    $this->load->view('editevent',$data);
    

    在你看来:

    foreach ($event as $items) {
        var_dump($items);
    }
    
    foreach ($groups as $group) {
        var_dump($group);
    }
    

    【讨论】:

    • 我忘了提到我有另一行将一些其他数据传递到视图$data['data'] = $this->as->the_event_edit($id);
    猜你喜欢
    • 2019-07-11
    • 2022-06-14
    • 2021-04-10
    • 1970-01-01
    • 2015-09-04
    • 2016-01-23
    • 1970-01-01
    • 2019-05-01
    • 2017-08-05
    相关资源
    最近更新 更多