您应该在将数据解析给 Smarty 之前准备好数据。
你可以这样做:
$result = array(
array('name' => 'Hockey Team 1', 'category_id' => 1),
array('name' => 'Hockey Team 2', 'category_id' => 2),
array('name' => 'Hockey Team 3', 'category_id' => 3),
array('name' => 'Football Team 1', 'category_id' => 4),
array('name' => 'Football Team 2', 'category_id' => 5),
array('name' => 'Football Team 3', 'category_id' => 6)
);
$sports = array();
foreach ($result as $team) {
$sport_parts = explode(' ', $team['name']);
$sport = array_shift($sport_part);
$team['name'] = join(' ', $sport_parts);
if (isset($sports[$sport]) === FALSE) {
$sports[$sport] = array();
}
$sports[$sport][] = $team;
}
这将产生一个像这样的数据集,在 Smarty 中很容易迭代:
array(2) {
["Hockey"]=>
array(3) {
[0]=>
array(2) {
["name"]=>
string(13) "Team 1"
["category_id"]=>
int(1)
}
[1]=>
array(2) {
["name"]=>
string(13) "Team 2"
["category_id"]=>
int(2)
}
[2]=>
array(2) {
["name"]=>
string(13) "Team 3"
["category_id"]=>
int(3)
}
}
["Football"]=>
array(3) {
[0]=>
array(2) {
["name"]=>
string(15) "Team 1"
["category_id"]=>
int(4)
}
[1]=>
array(2) {
["name"]=>
string(15) "Team 2"
["category_id"]=>
int(5)
}
[2]=>
array(2) {
["name"]=>
string(15) "Team 3"
["category_id"]=>
int(6)
}
}
}
Smarty 模板的示例:
{foreach from=$sports key=sport item=teams}
<h1>{$sport}</h1>
<ul>
{foreach from=$teams item=team}
<li>{$team['name']}</li>
{/foreach}
</ul>
{/foreach}