MySQL到PHP输出包含分组内容(类别)的HTML
我有一个问题,我在谷歌上搜索allot试图解决,但所有的解决方案都是我的变体。 所以我有这样的输出MySQL到PHP输出包含分组内容(类别)的HTML,php,html,Php,Html,我有一个问题,我在谷歌上搜索allot试图解决,但所有的解决方案都是我的变体。 所以我有这样的输出 <div class="row"> <?php $cat= '';?> <div class="blank"> @foreach($posts as $post) @if($cat!= $post->cat_id) </div><div class="col-sm-3"> <p class="alert
<div class="row">
<?php $cat= '';?>
<div class="blank">
@foreach($posts as $post)
@if($cat!= $post->cat_id)
</div><div class="col-sm-3">
<p class="alert alert-info"><strong>{{$post->category_name}}</strong></p>
<?php $cat= $post->cat_id; ?>
@endif
</ul><ul>
<li>
{{$post->title}}
</li>
@endforeach
@foreach($posts作为$post)
@如果($cat!=$post->cat\u id)
{{$post->category_name}
@恩迪夫
-
{{$post->title}
@endforeach
所以基本上我不会输出类别名称,然后在ulli中输出该类别中该div的所有帖子,然后关闭该div。
但我只使用了这个空白div,并在打开之前关闭ul和div,但这给了我无效的html,但排序良好。
有什么聪明的方法可以做到这一点吗
谢谢
以下是一个工作示例。我认为问题在于你打开和关闭foreach的地方 (为了清晰起见,我替换了普通php的blade语句,但您应该能够将其更改回来。) 编辑: 我离那不远
<?php $posts = [
['cat_id' => 1, 'cat_name' => 'a name', 'title' => 'title'],
['cat_id' => 1, 'cat_name' => 'a name2', 'title' => 'title2'],
['cat_id' => 2, 'cat_name' => 'another name', 'title' => 'title3'],
['cat_id' => 2, 'cat_name' => 'another name2', 'title' => 'title4'],
]; ?>
<div class="col-sm-3">
<?php $cat= '';?>
<?php foreach($posts as $post): ?>
<?php if($post['cat_id'] != $cat): ?>
<p class="alert alert-info">
<strong><?php echo $post['cat_name'];?></strong>
</p>
<ul>
<?php endif; ?>
<li> <?=$post['cat_name'];?> </li>
<?php if($post['cat_id'] == $cat): ?>
</ul>
<?php endif; ?>
<?php $cat= $post['cat_id']; ?>
<?php endforeach; ?>
</div>
在这里,我编辑了我之前的答案,并提出了以下几点建议:
- 关键不在于只编写有效的代码,还要编写可维护和可读的代码。这将有助于您或任何人在将来更改某些功能
- 在提问时尽量清晰,如果需要,请提供所需输出的示例(就像在评论中一样)
- 您可能可以在将数据传递到视图之前格式化数据,以便轻松打印数据,例如,将我在上述代码中使用的数组转换为如下内容: $posts=[ ['cat_id'=>1,'cat_name'=>a name','posts'=>[ ['title'=>'a title','content'=>'whatever'], ['title'=>'另一个标题','content'=>'whatever2'], ] ])
致以最诚挚的问候!所以经过广泛的尝试,我得到了我想要的。希望这是正确的方法
<?php
$cat= '';
foreach($posts as $post){
if($cat != $post['cat_id']){
echo $cat!= '' ? '</ul></div>' : '';
echo '<div class="col-sm-4 col-md-3">
<p class="alert alert-info"><strong>'.$post['cat_name'].'</strong></p>
<ul>';
$cat= $post['cat_id'];
}
echo '<li>'.$post['title'].'</li>';
}
echo '</ul>'; //close last opened ul
echo '</div>'; //close last opened div
?>
我必须问一下,@foreach是什么,这是php代码吗?首先请解释您使用的代码为什么在这里使用@ru是什么意思……它看起来像刀片模板,但您需要确认您在这里使用的模板语言。此外,您正在关闭一个不存在的
,并打开一个您从未使用过的模板语言ose,在这段代码的底部。嗨,是的,我很抱歉,没有提到。是的,这是刀片模板引擎。我知道,这是它的工作代码。我只需要正确的逻辑。所以我需要在一个- 标记之前打开它,这样就可以关闭它了?既然你看到了问题所在,我需要在创建的元素中循环元素。tat ul和f是一样的我制作的第一个div,这样我可以在第一个循环开始时关闭它。嘿,很抱歉延迟回复,不,这甚至还没有关闭,您在
div
之前打开ul
标记,将row
包装成列,而不是列,并且您将得到两行,而不是应该作为输出的两列。这是我想要的输出职位类别
职位1- 职位2
.
职位类别2
- 职位1a
- 职位2a
.