использовать foreach при печати названия категории только один раз

Мне нужно показать заголовки постов в соответствии с их категориями. но проблема в дизайне. Он имеет следующую структуру 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
)

)

0

Решение

Сначала измените свой 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>
1

Другие решения

Сохранить последний использованный 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

Надеюсь, это поможет вам.

Шаги:

Шаг 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>

Примечание: это примерно так, как вы хотите использовать. Пожалуйста, измените его на основе вашего кода.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector