我有一张名为'match'的足球比赛表。在该表中有一个字段'kickoff',它是匹配开始时的datetime-column。使用以下代码,我可以从表中获得所有匹配项。
$matches = $em->createQueryBuilder()
->select('m')
->from('FootballWcBundle:Matches', 'm')
->addOrderBy('m.kickoff', 'ASC')
->getQuery()
->getResult();
return $this->render('FootballWcBundle:Page:matches.html.twig', array(
'matches' => $matches
));
现在我想在屏幕上显示按日期分组的匹配项。 像这样:
2014年12月12日
MATCH1
MATCH2
14-12-2014
MATCH3
match4
match5
有没有办法让Twig知道如何通过启动列进行分组,还是有另一种方法可以做到这一点?
答案 0 :(得分:7)
你可以这样做:
{% set date = null %}
{% for match in matches %}
{% if date != match.kickoff %}
{% set date = match.kickoff %}
<h3>{{ date }}</h3>
{% endif %}
<p>{{ match.name }}</p>
{% endfor %}
这样,你将第一个日期设置为null,然后迭代所有匹配并写一个带有名称的'p'标签(我认为匹配有一个名称来做例子),并且当日期为匹配更改,你写一个'h3'标签与匹配的日期。由于在第一次迭代中将日期设置为null,因此第一个日期将为write。
答案 1 :(得分:0)
有一个源自COBOL
的受控中断算法。它可以在您的情况下使用,但您必须在TWIG
中重写它。我在JAVA
成功使用了它。
下面是受控中断算法的C / C ++实现。看看并根据你的情况使用这个原则。
#include <iostream>
#define LMARG " "
#define UNDERLN "=============="
using namespace std;
void displayTable(int table[],short size);
//
// Purpose: Illustrated a controlled break algorithm
// Given an ordered sequence of data members, display with summary
//
int main(void)
{
int table[] = {10,12,12,30,30,30,30,40,55,60,60,60};
displayTable(table,sizeof(table)/sizeof(int));
fflush(stdin);
getchar();
return 0;
}
void displayTable(int table[],short size)
{
int currentKey,lastKey;
int i, categoryCount,groupTotal;
currentKey = lastKey = table[0];
groupTotal = categoryCount = i = 0;
while (i < size)
{
if (currentKey == lastKey)
{
groupTotal += table[i];
categoryCount++;
cout << LMARG << table[i] << endl;
}
else
{
cout << LMARG << UNDERLN << endl;
cout << "Total: " << groupTotal << endl;
cout << "Croup Count: " << categoryCount << endl << endl;
cout << LMARG << table[i] << endl; // start of next group
groupTotal = currentKey,categoryCount = 1;
fflush(stdin);getchar();
}
lastKey = currentKey;
currentKey = table[++i]; // get next key
} // while
cout << LMARG << UNDERLN << endl; // last group summary
cout << "Total: " << groupTotal << endl;
cout << "Croup Count: " << categoryCount << endl << endl;
}