首先,我学习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 %}
任何帮助都非常感谢!
答案 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在控制器中完成这个过程,然后通过结果到模板。
希望它有所帮助。