Twig比较不同数组中的两个值

时间:2015-02-06 23:02:32

标签: symfony twig

首先,我学习Twig。 我想知道Twig是否有可能比较来自不同阵列/列表的两个不同的值?!

我有两个项目列表,我称之为:

{% if page.cart %}
{% for product in page.cart.products %}
  {{ product.id }}
{% endfor %}
{% endif %}

{% if products %}
{% for product in products %}
  {{ product.id }}
{% endfor %}
{% endif %}

我想比较两个product.id,所以我可以创建一个新的声明。有没有办法比较这两个值?我们的想法是检查page.cart.products中是否存在id,如果存在,则执行某些操作。

我想创建一个新语句来显示一些信息。像这样:

{% if page.cart %}
{% for product in page.cart.products %}
  {% set cartId %}{{ product.id }}{% endset %}
{% endfor %}
{% endif %}

{% if products %}
{% for product in products %}
  {% set listId %}{{ product.id }}{% endset %}
{% endfor %}
{% endif %}

{% if cartId == listId %}
.... do this ....
{% endif %} 

任何帮助都非常感谢!

1 个答案:

答案 0 :(得分:3)

您可以循环遍历一个阵列并检查第二个阵列中是否存在id。如果它在那里,你可以做点什么。

{# In case you want to store them, you can do so in an array #}
{% set repeatedIds = [] %}
{% for productCart in page.cart.products if page.cart %}
    {% for product in products if products %}
        {% if productCart.id == product.id %}
            <p>This id -> {{ product.id }} is already in page.cart.products</p>
            {% set repeatedIds = repeatedIds|merge([product.id]) %}
        {% endif %}
    {% endfor %}
{% endfor %}
{{ dump(repeatedIds) }}

这是一种非常基本的搜索算法,成本是二次的。显然,有更有效的方法可以在数组中查找元素(虽然实现起来更复杂)。

如果您需要处理的产品数量不是很大,您可以使用此解决方案。但是,如果你有,每个阵列中有超过一百种产品(或者你觉得算法正在减慢你的加载时间),你可以使用更复杂的方法和PHP在控制器中完成这个过程,然后通过结果到模板。

希望它有所帮助。