Foreach in array for codeigniter

时间:2013-12-30 02:53:55

标签: php codeigniter

所以,我正在使用codeigniter,我正在尝试使用日历类并将“事件”传递给我的日历。这是通过数组和标识符来完成的:

$calendar_info = array(
  'month' => '12',
  'year' => '2013',
  'data' => array(
    3  => 'Spaghetti<br/>Meatballs<br/>Salad<br/>Canned Fruit',
    4  => 'Ham<br/>Mashed Potatoes<br/>Corn<br/>Salad</br>'
   )
);

现在我无法将菜单项硬编码到应用程序中,我从数据库中获取它们。我的问题在于将foreach放入数组中,我收到以下错误:

Parse error: syntax error, unexpected T_FOREACH, expecting ')'

该错误只是一部分,以免泄露我的网址。以下是我现在正在尝试做的并得到上述错误。

    $this->db->select('*');
    $this->db->from('menus');
    $this->db->where('user_id', $session_data['id']);

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

    $calendar_info = array(
        'month' => '12',
        'year' => '2013',
        'data' => array(
            foreach ($query->result() as $row)
            {
                $row->menu_day => $row->menu_entree.'<br/>'.$row->menu_sideone.'<br/>'.$row->menusidetwo.'<br/>'.$row->menudessert
            }
        ),
    );

更新

这正是我在下面尝试做的事情:

我有一个数据库表,用于保存每月每天的菜单项。

列是:

menu_day
menu_month
menu_entree
menu_sideone
menu_sidetwo
menu_dessert

数组需要如下所示:

array(
  menu_day => 'menu_entree<br/>menu_sideone<br/>menu_sidetwo<br/>menu_dessert
)

或者例如:

array(
  3 => 'Spaghetti<br/>Meatballs<br/>Salad<br/>Canned Fruit'
)

2 个答案:

答案 0 :(得分:3)

你不能像你想要的那样在array()声明中循环。相反,正确的做法是使用循环构建您的数组,然后分配到$calendar_info['data']

不要将PHP代码视为动态构建的东西。它是您生成的数组数据结构,而不是定义它的代码。

// First build the array with your loop...
// An empty array to hold the result...
$data = array();
foreach ($query->result() as $row)
{
  // Add array keys to the array while looping...
  $data[$row->menu_day] = $row->menu_entree.'<br/>'.$row->menu_sideone.'<br/>'.$row->menusidetwo.'<br/>'.$row->menudessert;
}

$calendar_info = array(
    'month' => '12',
    'year' => '2013',
    // Then assign it into the appropriate place...
    'data' => $data
);

您不需要构建变量$data只是为了稍后扔掉。您也可以首先在$calendar_info中使用空数组定义$calendar_info['data'],然后在foreach循环中添加键$calendar_info['data'][$row->menu_day]

答案 1 :(得分:1)

你根本无法将foreach置于数组中,就像问题的布局一样。您需要使用foreach循环提前设置值,然后将该数组放入$calendar_info

$this->db->select('*');
$this->db->from('menus');
$this->db->where('user_id', $session_data['id']);

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

$data_array = array();
foreach ($query->result() as $row) {
  $data_array[$row->menu_day] = $row->menu_entree . '<br/>' . $row->menu_sideone . '<br/>' . $row->menusidetwo . '<br/>' . $row->menudessert;
}

$calendar_info = array(
    'month' => '12',
    'year' => '2013',
    'data' => $data_array
);