#php #arrays #codeigniter #multidimensional-array
#php #массивы #codeigniter #многомерный массив
Вопрос:
У меня есть контроллер для получения пользователей из БД и отображения каждого пользователя в строке таблицы
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 любой другой номер страницы, я получаю строки пользователей без заказов данных, хотя, если я печатаю заказы r над таблицей, я получаю правильные заказы
Ответ №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 следующим образом:
$orders[$user->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
}
Надеюсь, это поможет!
Комментарии:
1. отлично работает только для первой страницы, когда я перехожу на страницу 2, используя разбивку на страницы, я получаю только пользовательскую строку без получения заказов. Если я печатаю_r($orders) перед таблицей, я получаю правильные заказы пользователей на второй странице, но строки заказов не печатаются для каждого пользователя. URL меняется на index/2 Я не знаю причину
2. Я не знаю причину, по которой заказы не печатаются на других страницах, а просто печатаются на первой странице
3. Я также не уверен, почему. Если проблема все еще не решена, вы можете поделиться точными кодами.