2015-02-06 61 views
1

首先,我正在学习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的,所以我可以创建一个新的声明。有什么方法可以比较两个值吗?这个想法是检查一个ID是否存在于page.cart.products中,如果是的话就做一些事情。

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

{% 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

如果你正在寻找一个单一的ID,那么用两个不同的循环就不可能这样做。 – 2015-02-06 23:08:44

+1

为什么不比较它的控制器并返回结果?它比返回2个变量更有效率,然后在比较视图中仅显示一个结果。 – 2015-02-07 00:13:42

+0

@ColourDalnet:好的,但你能举个例子吗?我真的不知道从哪里开始,因为我是Twig的新手 – Meules 2015-02-07 00:29:08

回答

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来完成这个过程,只需通过结果到模板。

希望它有帮助。

+0

这不是我正在寻找的东西,但它给了我一些关于循环数组的好的见解。 – Meules 2015-02-07 15:26:10

+0

很高兴帮助:)祝你好运 – acontell 2015-02-07 15:32:38