Twig检查值是否在数组中

时间:2017-04-04 20:15:00

标签: arrays symfony twig saas

我无法检查带有Twig的数组中是否存在值。 如果购物车中有特定产品,我想在结帐时隐藏送货方式。 我只能使用Twig代码,所以我必须找到一个逻辑。

所以,假设产品ID 1234在购物车中,那么我想隐藏#certain_div

所以我拥有的是这个 - >

  {% if checkout %}

      {% set array = theme.sku_shipping_rule | split(',') %}
     // theme.sku_shipping_rule = a text string like 1234, 4321, 5478         

        {% if checkout.products %}
         {% for product in checkout.products %}
          {% if product.sku in array %}

           <style>
             #certain_div {
                display: none;
              }
           </style>

          {% endif %}
         {% endfor %}
       {% endif %}

    {% endif %}

我面临的问题是我的代码似乎总是返回true。因此,即使product.sku与数组中的值不匹配,它仍然会隐藏#certain_div。我已在{{ product.sku }}之前放置<style>进行了测试。

我错了什么?

任何帮助都非常感谢!

更新

我已更新问题/代码以显示正在发生的事情

{% if checkout %}
    {% set skuToCheck = theme.sku_shipping_rule | split(',') %}
    {% set skuInCart = [] %}
    {% if checkout.quote.products %}
        {% for product in checkout.quote.products %}
            {% set skuInCart = skuInCart | merge([product.sku]) %}
        {% endfor %}
     {% endif %}

     {% for myVar in skuInCart %}
         {{ myVar }}<br/>
     {% endfor %}

     // this prints
     PSYGA1 // where this sku should NOT match
     FP32MA4

    {% for myVar in skuToCheck  %}  
        {{ myVar }}<br/>

        // this prints
        FP32LY4
        FP32STR4
        FP32MA4   

        {% if myVar in skuInCart %} // also tried with | keys filter
            {{ myVar }} is found
        {% endif %}
    {% endfor %}
{% endif %}

所以我所做的就是将数据集放在数组skuInCart中的购物车中的产品中。接下来,我想检查myVar数组中是否存在skuInCart。如果是,请打印myVar is found

您应该期望它只打印匹配的结果。但是,它实际打印的所有值skuInCart(使用keys过滤器)或完全空白而不使用keys过滤器。

2 个答案:

答案 0 :(得分:1)

What you are doing in theory should work, have a look a this fiddle example to show you a working demonstration:

https://twigfiddle.com/yvpbac

Basically:

<div id="certain_div">
This should not show up
</div>

{% set searchForSku = "890" %}
{% set productSkuArrayString = "1234,4567,890" %}
{% set productSkuArray = productSkuArrayString|split(',') %}
{% if searchForSku in productSkuArray %}
<style>
    #certain_div {
        display: none;
    }
</style>
{% endif %}

<!-- New Trial -->

<div id="certain_div">
This should show up
</div>

{% set searchForSku = "891" %}
{% set productSkuArrayString = "1234,4567,890" %}
{% set productSkuArray = productSkuArrayString|split(',') %}
{% if searchForSku in productSkuArray %}
<style>
    #certain_div {
        display: none;
    }
</style>
{% endif %}

Will result in:

<div id="certain_div">
This should not show up
</div>

<style>
    #certain_div {
        display: none;
    }
</style>

<!-- New Trial -->

<div id="certain_div">
This should show up
</div>

答案 1 :(得分:0)

您可以使用iterable检查变量是数组还是可遍历对象:

img