Мне нужно показать заголовки постов в соответствии с их категориями. но проблема в дизайне. Он имеет следующую структуру div. Я использую PHP.
<div class="row">
<div class="some-class">
<h1> Category1 name here</h1>
<ul>
<li>sds</li>
<li>sds</li>
<li>sds</li>
</ul>
</div>
<div class="some-class">
<h1> Category2 name here</h1>
<ul>
<li>sds</li>
<li>sds</li>
<li>sds</li>
</ul>
</div>
</div>
Я знаю, что мне нужно использовать цикл foreach, но не знаю, каким образом
Это массив, который я получаю.
Array
(
[0] => Array
(
[category_name] => Getting Started
[id] => 2
[question] => GS1
[answer] => a sd asd asdjasld asd asdasd asd asd asd asdjkalsjd as
dasd asd asd as das d. as dasd asd as
asd asd asd asd as das as d.
a sdas d asd as dasd asd asd . asd asss
.a sd asd asd as
[created] => 2017-02-17 05:26:15
[slug] => gs1
[category] => 3
)
[1] => Array
(
[category_name] => Getting Started
[id] => 5
[question] => GS2
[answer] => sad as d as
[created] => 2017-02-17 05:48:19
[slug] => gs2
[category] => 3
)
[2] => Array
(
[category_name] => Buying & Selling
[id] => 3
[question] => BS1
[answer] => sadas dasdas d
as d
as dasdkas;ldk;laskd; kasd
as dlask ;ldk; kas;dk asd lka;sdk
[created] => 2017-02-17 05:47:33
[slug] => bs1
[category] => 4
)
[3] => Array
(
[category_name] => Buying & Selling
[id] => 6
[question] => BS2
[answer] => as das das d
[created] => 2017-02-17 05:48:39
[slug] => bs2
[category] => 4
)
[4] => Array
(
[category_name] => Renting
[id] => 4
[question] => rent1
[answer] => asd asd as das
[created] => 2017-02-17 05:48:06
[slug] => rent1
[category] => 6
)
)
Сначала измените свой QUERY, чтобы вернуть имя и категорию с помощью GROUP BY, попробуйте это ..
SELECT faq_categories.category_name, GROUP_CONCAT (site_faqs.question) FROM faq_categories JOIN site_faqs ON site_faqs.category = faq_categories.id GROUP BY faq_categories.category_name ORDER BY faq_categories.id ASC
И после получения значений в виде массива и попробуйте следующий код
<div class="row">
<?php foreach( $categoryArr as $category ) { ?>
<div class="some-class">
<h1> <?php echo $category['category_name']; ?> </h1>
<ul>
<?php $questions = explode (', ', $category['question'] ); // explode the comma seperated question value to array
foreach( $questions as $question ){ ?>
<li> <?php echo $question; ?> </li>
<?php } ?>
</ul>
</div>
<?php } ?>
</div>
Сохранить последний использованный category
как $catt
и мы проверяем, в следующий раз имя категории будет равно или нет.
Если не равно означает, что он отображает заголовок и <li>
также.
иначе это только отображение <li>
в подкатегории этого заголовка.
Спасибо Магнус.
Проверено:
<div class="row">
<?php
$catt = '';
foreach( $arr as $category ) {
if($catt != $category){
?>
<div class="some-class">
<h1> <?php echo $category;?></h1>
<ul>
<li>sds</li>
<li>sds</li>
<li>sds</li>
</ul>
</div>
<?php
} else{ ?>
<ul>
<li>sds</li>
<li>sds</li>
<li>sds</li>
</ul>
<?php }
$catt=$category;
}?>
</div>
Надеюсь, это поможет вам.
Шаги:
Шаг 1: Получить категорию из таблицы категорий
Шаг 2: Получить сообщения из таблицы сообщений на основе идентификатора категории
Код: это пример кода, пожалуйста, измените его в зависимости от вашей таблицы и кода
<div class="row">
<?php
$categories = " SELECT * From Category " ;
foreach ( $categories as $category ) {
$posts = " select * from posts where category = ".$category->id;
if(count($posts) > 0) {
?>
<div class="some-class">
<h1> <?php echo $category->name; ?></h1>
<ul>
<?php
foreach ( $posts as $post ) { ?>
<li> <?php echo $post->title; ?> </li>
<?php } ?>
</ul>
</div>
<?php } } ?>
</div>
Примечание: это примерно так, как вы хотите использовать. Пожалуйста, измените его на основе вашего кода.