2011-04-20 71 views
1

我有一个事件数据库表在其中:从数据库获取数据到数组用foreach

id | title | description | day_start | day_end | user_id 

1 | sometitle | blabla  | 2011-04-20 | 2011-04-21 | 1 
2 | title 2 | bleble  | 2011-04-20 | 2011-04-21 | 1 

我想读这一点构成了我与foreach循环分贝。

我想这个存储到$data[day_start]

例如:$data['2011-04-21']应包含在这种情况下两个数组,每一个事件。我不知道如何做到这一点。我有以下代码(在CI中):

$start参数是一个日期,如2011-04-20)。

public function get_event_data($start) 
{ 
    $data = array(); 

    $query = $this->db->query(
           "SELECT * 
           FROM tblEvents 
           WHERE user_id = '" . $this->session->userdata('id') . "' 
           AND day_start = '" . $start . "';" 
          ); 

    foreach($query->result() as $row) 
    { 
     $data[$row->day_start] = array(
          'title'   =>   $row->title, 
          'description' =>   $row->description, 
          'day_start'  =>   $row->day_start, 
          'day_end'  =>   $row->day_end, 
          'time_start' =>   $row->time_start, 
          'time_end'  =>   $row->time_end, 
          'user_id'  =>   $row->user_id 
       ); 
    } 
    return $data; 
} 

然而,如预期的,这仅输出第二事件(因为我使用“=”,这将覆盖被放置在阵列中的第一次的数据):

阵列(2011-04-20] => Array( [title] =>测试事件2 [说明] =>第二个事件。[day_start] => 2011-04-20 [day_end] => 2011-04- 20 [time_start] => 12 [time_end] => 13 [user_id] => 1))

(这里的数据与我在顶部提供的数据不同,但它是关于这个想法,而不是数据)。

我试过使用。=但是然后php抱怨说没有找到这样的索引..原因我没有启动它,我试图添加它。

那么,我尝试了一个if(isset($data[$start])块,但那并没有真正让我在任何地方。

我想抓住特定日子的所有事件并将它们放入数组中,以便我可以在应用程序中进一步处理它。 非常感谢。

回答

3

尝试

$data[$row->day_start][] = array(

第二套[]将创建一个自动迭代的数组,所以没有数据将被覆盖。

+0

非常感谢。那样做了。 :D – cabaret 2011-04-20 10:19:32

+0

很酷,自动迭代数组是一个非常有用的概念! – 2011-04-20 10:40:49

0

除非我误解,否则CI允许您返回一组结果,它与上面的代码完全相同。

return $query->result_array();

会做到这一点。

如果你不想阵列中的所有你的数据,那么就不要选择*,只需要你所需要的。