如何在Twig模板引擎中对重复年份数据去重并合并?
在Twig模板中合并重复年份的列表
完全可以实现,分两种场景处理:
场景1:后端已提供结构化数据
如果你的后端(比如PHP)已经把数据整理成包含年份和姓名的数组,直接传给Twig后,用group过滤器按年份分组,再拼接姓名即可:
假设后端传入的变量people结构如下:
$people = [ ['year' => 1985, 'name' => 'John'], ['year' => 1974, 'name' => 'Lena'], ['year' => 1985, 'name' => 'Sandra'], ['year' => 1974, 'name' => 'Tom'], ['year' => 1985, 'name' => 'Jess'], ];
Twig模板代码:
{% for year, group in people|group('year') %} {{ year }} - {{ group|map(item => item.name)|join(', ') }} {% endfor %}
场景2:原数据是纯文本格式
如果你的数据是像示例里的纯文本字符串,可以在Twig里先拆分文本,再手动分组:
假设纯文本存在变量rawList中,模板代码如下:
{# 按换行拆分每一行 #} {% set items = rawList|split('\n') %} {% set groupedData = {} %} {# 遍历每一行,拆分年份和姓名,存入分组数组 #} {% for item in items %} {% if item|trim %} {% set parts = item|split(' - ') %} {% set currentYear = parts[0] %} {% set currentName = parts[1] %} {% set groupedData = groupedData|merge({ (currentYear): (groupedData[currentYear]|default([]))|merge([currentName]) }) %} {% endif %} {% endfor %} {# 输出最终结果 #} {% for year, names in groupedData %} {{ year }} - {{ names|join(', ') }} {% endfor %}
两种方式都能输出你需要的合并后的列表格式。
内容的提问来源于stack exchange,提问作者Zhivago
相关产品推荐
相关产品推荐

