在codeigniter控制器中创建一个多维数组

时间:2016-10-11 10:06:36

标签: php arrays codeigniter multidimensional-array

我有一个控制器来从DB获取用户并显示表格行中的每个用户

Controller: [update] //only first page displays data correctly but pager +1 using 
pagination displays user data only not getting orders as first page
when I print_r($orders) in all pages I get correct orders but in the table the inner 
foreach doesn't work

public function index($page_id = 1)
{
    $perPage = 25;
    $offset = ($page_id - 1) * $perPage;

    if ($offset < 0) {
        $offset = $perPage;
    }
    $lang_id = $this->data['active_language']->id;
    $config['base_url'] = base_url() . "reports/myController/index/";
    $config['per_page'] = $perPage;
    $config['first_link'] = FALSE;
    $config['last_link'] = FALSE;
    $config['uri_segment'] = 4;
    $config['use_page_numbers'] = TRUE;
    $config['first_link'] = lang('first_page');
    $config['last_link'] = lang('last_page');
    $config['first_tag_open'] = '<li>';
    $config['first_tag_close'] = '</li>';
    $config['last_tag_open'] = '<li>';
    $config['last_tag_close'] = '</li>';
    $config['next_tag_open'] = '<li>';
    $config['next_tag_close'] = '</li>';
    $config['prev_tag_open'] = '<li>';
    $config['prev_tag_close'] = '</li>';
    $config['num_tag_open'] = '<li>';
    $config['num_tag_close'] = '</li>';
    $config['cur_tag_open'] = '<li><strong>';
    $config['cur_tag_close'] = '</strong></li>';

    $config['display_pages'] = TRUE;

    $orders_serials_ids = $this->myModel->get_orders_serials_ids();

    $config['total_rows'] = $this->myModel->count_orders();

    $this->pagination->initialize($config);

    $users = $this->myModel->users_merchants($perPage, $offset);
    $this->data['users'] = $users;

    $user_orders = array();
    foreach ($users as $user){
        $user_orders[$user->user_id] = $this->myModel->get_orders($user->user_id);
    }

View:
<table>
    <tr>
      <th>
        <?php echo 'user';?>
      </th>
      <th>
        <?php echo 'email';?>
      </th>            
      <th>
        <?php echo 'device id';?>
      </th>
    </tr>
    <?php
    foreach($users as $val){
    ?>
    <tr>
      <td>
        <?=$val->user_id?>
      </td>
      <td>
        <?php echo $val->email;?>
       </td>
       <td>
        <?php echo $val->device_id;?>
       </td>
    </tr>
    <?php
    $order = array(); //empty the variable before each loop
    foreach($orders[$user->user_id] as $order){
        echo '<tr><td colspan="4">'. date('Y-m',$order->unix_time).
' -> '.round($order->amount2,2).'</td></tr>';                   
    }
}
?>
</table>
<ul class="pagination"><?php if($pagination) echo $pagination;?></ul>

user id    user name        user email
1          Mike             mike@yahoo.com
order:10   order total:50   order date: 2016-09-12
order:12   order total:100  order date: 2016-09-14
2          Tom              Tom@live.com
order:15   order total:80   order date: 2016-09-13
order:16   order total:120  order date: 2016-09-14
order:17   order total:140  order date: 2016-10-10      

这仅适用于第一页,但是当我导航到第二页时,控制器URL更改为index / 2 r任何其他页码我获取没有数据订单的用户行但是如果我在表格上方打印__订单我得到正确的订单< / p>

1 个答案:

答案 0 :(得分:1)

你可以稍微减少代码但是在这样的控制器中:

$this->data['users'] = $users; // correct data no problem here
$user_orders = array();
foreach ($users as $user){
   $user_orders[$user->user_id] = $this->myMmodel>get_orders($user->user_id); //make user_id as key so that you can access easily for each user 
}

$this->data['orders'] = $user_orders;

然后在视图中,您可以访问foreach循环中每个用户的订单,如下所示:

$订单[$用户&GT; USER_ID]

因为它也是一个数组,你必须运行循环来为每个用户创建订单行:

$order = array(); //empty the variable before each loop
foreach($orders[$user->user_id] as $order){
   echo '<tr><td>'.$order->id.'</td>'.....//more columns like this
}

希望这会有所帮助!