#php #loops #codeigniter
#php #циклы #codeigniter
Вопрос:
Мне нужна помощь. Я хочу показать элемент div на моей PHP-странице Codeigniter из 3-х табличных отношений:
my Table is=
Category =>category_id, category_name
Sub_Category => sub_category_id,category_id, sub_category_name
Item => item_id, sub_category_id,item_name
модель =
public function item_data()
{
$query = $this->db->query('SELECT A.item_name, B.sub_category_name, C.category_name FROM
item A
sub_kategori A
LEFT JOIN sub_category B ON B.sub_category_id = A.sub_category_id
LEFT JOIN category C ON C.category_id = B.category_id
');
return $query->result();
}
Контроллер :
function item_view()
{
//--------
$item_data = $this->model_app->data_ticket();
$data['item_data'] = $item_data;
$this->load->view('template', $data);
}
Вид :
<?php $no = 0; foreach($item_data as $row) : $no ;?>
<div class="card">
<div class="card-header">
<h3 class=""><?php echo $row->sub_category_name;?></h3>
<h5 class=""><?php echo $row->category_name;?></h5>
</div>
<div class="card-footer">
<ul>
//... How to show/Looping item_name by sub_category_id ...?
<li class="nav-item">
<a href="#" class="nav-link">
<?php echo $row->item_name;?>
</a>
</li>
</ul>
</div>
</div>
<?php endforeach;?>
Приведенный выше код показывает повторяющееся sub_category_name через item_name.
выводим сейчас =
sub_category1 => category1=>item1
sub_category1 => category1=>item2
sub_category1 => category1=>item3
sub_category2 => category1=>item4
sub_category2 => category1=>item5
sub_category2 => category1=>item6
...
Я хочу получить эхо-отображение данных =
sub_category1 => category1=>item1,item2,item3
sub_category2 => category1=>item4,item5,item6
.....
Вопрос:
Как отобразить / зациклить имя_элемента для каждого по sub_category_id …?
Спасибо за помощь.
Комментарии:
1. итак, у вас есть три таблицы со связью: элемент, имеющий подкатегорию, является дочерним элементом категории. и вы хотите отобразить группу элементов по подкатегориям, верно?
2. @dewokaji пожалуйста, покажите нам, что вы получаете на выходе и чего вы хотите достичь???
3. @EricsNguyen, да, верно
4. @KUMAR Я отредактировал подробный вопрос, спасибо
Ответ №1:
я предполагаю, что результат вашего запроса будет выглядеть следующим образом:
Iphone Xr 64 GB|Iphone|Apple
Iphone XS 128 GB|Iphone|Apple
Airpod 2| Headphone|Apple
Airpod Pro| Headphone|Apple
Macbook air 2020 128Gb| laptop|Apple
Итак, если вы хотите отобразить группу по подкатегориям, вам следует реструктурировать свои данные в модели или контроллере, а не делать это в представлении, потому что вложенный php-код и html-код очень сложны для отладки и повторного использования. к структуре , подобной этой:
[Note]
: поскольку вывод вашего запроса является stdclass, давайте преобразуем его в array, прежде чем использовать мой код:
$arr = json_decode(json_encode($yourObject), TRUE);
['Iphone'=>
[
'category'=>'Apple',
'items'=> ['Iphone Xr 64 GB','Iphone XS 128 GB']
]
]
у меня есть некоторый код для вас, чтобы сгруппировать список по sub_category
$arr = [
['category'=>'Apple','sub_category'=>'Iphone','item'=>'Iphone XR'],
['category'=>'Apple','sub_category'=>'Iphone','item'=>'Iphone XS'],
['category'=>'Apple','sub_category'=>'Iphone','item'=>'Iphone X'],
['category'=>'Apple','sub_category'=>'HeadPhone','item'=>'AirPod 2'],
['category'=>'Apple','sub_category'=>'Laptop','item'=>'Macbook air'],
['category'=>'Samsung','sub_category'=>'MobilePhone','item'=>'Galaxy S10'],
];
$newArr = [];
foreach ($arr as $key => $item) {
$newArr[$item['sub_category']][$key] = $item;
}
результатом будет:
$newArr = [
'Iphone'=>[
['category'=>'Apple','sub_category'=>'Iphone','item'=>'Iphone XR'],
['category'=>'Apple','sub_category'=>'Iphone','item'=>'Iphone XS'],
['category'=>'Apple','sub_category'=>'Iphone','item'=>'Iphone X'],
],
...
];
вид должен быть:
<?php foreach($new_arr as $key => $value)?>
<div class="card">
<div class="card-header">
<h3 class=""><?php echo $key;?></h3>
<h5 class=""><?php echo $value[0]['category'];?></h5>
</div>
<div class="card-footer">
<ul>
<?php foreach($value as $item) ?>
<li class="nav-item">
<a href="#" class="nav-link">
<?php echo $item['item']?>
</a>
</li>
<?php endforeach;?>
</ul>
</div>
</div>
<?php endforeach;?>
Комментарии:
1. Извините, после реструктуризации массива я получаю некоторую ошибку на моем контроллере = «Не удается использовать объект типа stdClass в качестве массива в …»
2. итак, замените array на stdClass
3. @Erics, Большое спасибо за вашу помощь, я очень ценю это. это решило мою проблему с небольшой модификацией