将查询结果划分为基于字段的列表

时间:2013-03-12 17:13:01

标签: php mysql wordpress loops nested-loops

我正在使用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]-->

结束循环

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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

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

即可
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>';
}