You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Twig模板中基于title合并两个对象数组?

问题根源与解决方法

Twig自带的merge过滤器是基于数组键名实现合并的,它只会处理数组的数字索引或字符串键的重复覆盖/追加,完全不会识别对象里的title字段并以此为关联条件——这就是你直接用merge要么关联不上、要么丢数据的原因。

下面是按title字段合并两个数组的可行方案:

1. 先构建价格数组的标题索引

先把var_arr转换成以title为键、price为值的关联数组,这样后续可以快速通过标题匹配价格:

{% set price_map = {} %}
{% for item in var_arr %}
    {% set price_map = price_map|merge({ (item.title): item.price }) %}
{% endfor %}

2. 遍历opt_arr生成合并数组

遍历opt_arr的每一项,匹配price_map里对应的价格,组装成包含title、id、price的新对象:

{% set merged_array = [] %}
{% for opt in opt_arr %}
    {% set merged_item = {
        title: opt.title,
        id: opt.id,
        price: price_map[opt.title] ?? null  {# 处理标题不存在时的空值 #}
    } %}
    {% set merged_array = merged_array|merge([merged_item]) %}
{% endfor %}

3. 可选:补充opt_arr中没有的标题项

如果需要保留var_arr里存在但opt_arr中没有的标题项,可以再加一段遍历补充:

{% for item in var_arr %}
    {% set is_exists = false %}
    {% for opt in opt_arr %}
        {% if opt.title == item.title %}
            {% set is_exists = true %}
            {% break %}
        {% endif %}
    {% endfor %}
    {% if not is_exists %}
        {% set merged_item = {
            title: item.title,
            id: null,
            price: item.price
        } %}
        {% set merged_array = merged_array|merge([merged_item]) %}
    {% endif %}
{% endfor %}

内容的提问来源于stack exchange,提问作者Meules

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 09:00:56