doulongti5932
doulongti5932
2016-10-11 10:06
浏览 48
已采纳

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

I'm having a controller to get users from DB and display every user in a table row

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      

This works in the first page only but when I navigate to second page the controller url changes to index/2 r any other page number I get users rows without data orders though if I print_r orders above the table I get correct orders

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dongnanbi4942
    dongnanbi4942 2016-10-11 12:40
    已采纳

    you can reduce the code a little but in controller like this:

    $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;
    

    Then in view, you can access orders of each user inside the foreach loop like this:

    $orders[$user->user_id]

    as it is also an array, you have to run loop to create order rows for each user:

    $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
    }
    

    Hope this would help!

    点赞 评论

相关推荐