抱歉这个非常简单的php问题。
我在php中有一个网站,想要回显类别和文本列表。 当我写这样的东西时......
<?php foreach ($reports as $report): ?>
<h3><?php echo h($report["category_title"]); ?></h3>
<ul>
<li><?php echo h($report["text"]); ?></a></li>
</ul>
<?php endforeach; ?>
它向我显示了这样的事情......
类别标题1
文字1
类别标题1
文字2
类别标题2
文字3
类别标题2
文字4
我的问题是如何将其显示为......
类别标题1
文字1
文字2
类别标题2
文字3
文字4
如果有人可以帮助我,我会感激不尽。
谢谢。
答案 0 :(得分:1)
您可以使用ouzo-goodies使用替代解决方案。 Arrays::groupBy
方法:
$reports = Arrays::groupBy($reports, Functions::extract()->category_title);
foreach ($reports as $category => $report) {
echo '<h3>' . $category . '</h3>';
echo '<ul>';
foreach ($report as $element) {
echo '<li>' . $element['text'] . '</li>';
}
echo '</ul>';
}
结果:
<h3>category1</h3>
<ul>
<li>title1</li>
<li>title2</li>
</ul>
<h3>category2</h3>
<ul>
<li>title1</li>
<li>title2</li>
</ul>
答案 1 :(得分:0)
您可以定义名为$currentCat
的变量,并检查类别标题是否更改:
<?php
$currentCat = false;
foreach ($reports as $report):
if ($currentCat !== $report[category_title]):
if ($currentCat)
echo '</ul>';
?>
<h3><?php echo h($report[category_title]); ?></h3>
<ul>
<?php
$currentCat = $report[category_title];
endif;
?>
<li><?php echo h($report["text"]); ?></a></li>
<?php endforeach;
if ($currentCat)
echo '</ul>';
?>
答案 2 :(得分:0)
这里的问题似乎在于如何存储数据。我假设您的$报告就像这样
$reports = [
['category_title' => 'Category title 1', 'text' => 'text 1'],
['category_title' => 'Category title 1', 'text' => 'text 2'],
['category_title' => 'Category title 2', 'text' => 'text 1'],
['category_title' => 'Category title 2', 'text' => 'text 2'],
];
您不应该复制category_title信息。你的$ reports var应该是这样的。
$reports = [
['category_title' => 'Category title 1', 'texts' => ['text 1', 'text 2']]
['category_title' => 'Category title 2', 'texts' => ['text 1', 'text 2']]
];
您可以像这样从一个数组转换为另一个数组。
$new_reports = [];
foreach ($reports as $report) {
if(!isset($new_report[$report['category_title']])) {
$new_report['category_title'] = [];
}
$new_report['category_title'] []= $report['text'];
}