2015-02-06 99 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