Craft/Twig 如何循环多个 key/value 对并从该循环中删除重复项?

Craft/Twig How to loop multiple key/value pairs and remove duplicates from that loop?

在 Craft CMS 中,我有 child 个条目,其中每个 child 都有一个分配了 "city" 和 "country" 值的位置。

我希望输出 "City, Country" 文本列表,但删除任何重复项,因为两个或更多 children 可能共享相同的 "city,country" 对。

重要的是我可以分别引用每个 child 的城市和国家/地区值,因为我需要使用国家/地区值来显示列表中每个 child 项目的标志。

我已经了解并尝试了 "twig hash" 和 "associative arrays" 并找到了可用的片段,但无法使它们一起用于我的案例。

这不起作用:

{% set children = entry.children %}

{% set locations = {} %}

{% for child in children %}
    {% set city = child.location.parts.locality %}
    {% set country = child.location.parts.country %}

    {% if city not in locations %}
        {% set locations = locations|merge({ city : country }) %}
    {% endif %}

{% endfor %}

{% for location in locations %}
    {% for k, v in location %}
        {{ k }}, {{ v }} <br />
    {% endfor %}
{% endfor %}

如果你想让 city 成为数组的键,你需要将它们用括号括起来,这样变量就会被 twig 解释。

另外你不需要双 for 循环,你正在构建一个一维数组

{% set locations = {} %}

{% for child in children %}
    {% set city = child.city %}
    {% set country = child.country %}

    {% if city not in locations %}
        {% set locations = locations|merge({ (city) : country }) %}
    {% endif %}

{% endfor %}

{% for k,v in locations %}
    {{ k }}, {{ v }} <br />
{% endfor %}

demo