【问题标题】:Divide query result into lists based on field根据字段将查询结果划分为列表
【发布时间】:2013-03-12 17:13:01
【问题描述】:

我正在使用 Wordpress 创建一个自定义页面,并且需要根据标签将我的查询结果划分为列表。我知道有一个 Wordpress 堆栈交换,但这对我来说更像是一个基本的 PHP 函数。我在 Wordpress 堆栈中发现的唯一内容是根据标签名称执行新查询。

一定有更有效的方法……

我是 PHP 新手。更复杂的是,我一直在与循环作斗争,但我每天都在越来越多地掌握这个概念。

这是我想要实现的逻辑:

查询数据库并获取标记为“红、绿、蓝、黄”的帖子的“标题”。这部分我可以用WP_Query()函数来做,那里没问题……麻烦的是下一部分。

循环查询并输出:

<ul id="red">
<li>Output title of first post tagged with Red</li>
<li>Output title of second post tagged with Red</li>
<li>Output title of third post tagged with Red</li>
<!--[etc...]-->
</ul>
<ul id="green">
<li>Output title of first post tagged with Greeen</li>
<li>Output title of second post tagged with Green</li>
<li>Output title of third post tagged with Green</li>
<!--[etc...]-->
</ul>
<!--[continue for other colors requested in the query]-->

结束循环

我理解第一个循环会遍历结果并输出所有记录的标题,我只是对如何循环遍历结果并进一步除以颜色感到困惑。

非常感谢任何帮助。

【问题讨论】:

标签: php mysql wordpress loops nested-loops


【解决方案1】:

首先,您可以对从数据库中得到的结果进行排序,只需添加一个

ORDER BY `color` // for MySql at least

如果您希望在一个循环中完成所有这些操作,那么代码会变得有点混乱。每次颜色更改时,您都必须存储最后一种颜色并终止+启动一个新的 ul 元素。

另一个(更好的 IMO)选项是将您的元素分类到循环内的数组中,然后在循环之后,适当地回显每个数组的内容。

$colors = array();
while($row = ..FETCH_MORE_DATA_FROM_DB...){
  if (!is_array($colors[$row['color']])){ 
    $colors[$row['color']] = array(); 
  }
  $colors[$row['color']][] = "<li>{$row['title}</li>";
}

foreach($colors AS $colorName => $elements){
  echo '<ul id="'. $colorName .'">';
  foreach($elements AS $element){
    echo $element;
  }
  echo '</ul>';
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多