Twig:if语句中的in_array或类似内容?

时间:2011-09-18 08:58:44

标签: twig

我使用Twig作为模板引擎,我真的很喜欢它。但是,现在我遇到的情况绝对必须以比我发现的更简单的方式完成。

我现在拥有的是:

{% for myVar in someArray %}    
    {% set found = 0 %}
    {% for id, data in someOtherArray %}
        {% if id == myVar %}
            {{ myVar }} exists within someOtherArray.
            {% set found = 1 %} 
        {% endif %}
    {% endfor %}

    {% if found == 0 %}
        {{ myVar }} doesn't exist within someOtherArray.
    {% endif %}
{% endfor %}

我正在寻找的是更像这样的东西:

{% for myVar in someArray %}    
    {% if myVar is in_array(array_keys(someOtherArray)) %}
       {{ myVar }} exists within someOtherArray.
    {% else %}
       {{ myVar }} doesn't exist within someOtherArray.
    {% endif %}
{% endfor %}

有没有办法实现这个我还没有看到的?

如果我需要创建自己的扩展,如何在测试功能中访问myVar?

感谢您的帮助!

7 个答案:

答案 0 :(得分:414)

您只需要从

更改第二个代码块的第二行
{% if myVar is in_array(array_keys(someOtherArray)) %}

{% if myVar in someOtherArray|keys %}

in是包含运算符,keys是一个返回数组键的过滤器。

答案 1 :(得分:74)

这里要清楚一些事情。接受的答案与PHP in_array 不一样。

与PHP in_array 相同,请使用以下表达式:

{% if myVar in myArray %}

如果你想否定这一点,你应该使用它:

{% if myVar not in myArray %}

答案 2 :(得分:9)

@jake stayman之后的另一个例子:

{% for key, item in row.divs %}
    {% if (key not in [1,2,9]) %} // eliminate element 1,2,9
        <li>{{ item }}</li>
    {% endif %}
{% endfor %}

答案 3 :(得分:2)

尝试一下

{% if var in ['foo', 'bar', 'beer'] %}
    ...
{% endif %}

答案 4 :(得分:1)

它可以帮助你。

{% for user in users if user.active and user.id not 1 %}
   {{ user.name }}
{% endfor %}

更多信息:http://twig.sensiolabs.org/doc/tags/for.html

答案 5 :(得分:0)

尽管以上答案是正确的,但在使用三元运算符时,我发现了一种更加用户友好的方法。

{{ attachment in item['Attachments'][0] ? 'y' : 'n' }}

如果有人需要遍历foreach,

{% for attachment in attachments %}
    {{ attachment in item['Attachments'][0] ? 'y' : 'n' }}
{% endfor %}

答案 6 :(得分:0)

这里有一个用 Twig 的所有可能性来完成答案:

要实现这样的目标:

{% for myVar in someArray %}    
    {% if myVar in someOtherArray|keys %}
       {{ myVar }} exists within someOtherArray.
    {% else %}
       {{ myVar }} doesn't exist within someOtherArray.
    {% endif %}
{% endfor %}

(https://twigfiddle.com/0b5crp)

您也可以使用 array mapping 并具有以下单行:
(Twig >= 1.41 或 >= 2.10 或任何 3.x 版本)

{{ someArray|map(myVar => myVar ~ (myVar not in someOtherArray|keys ? ' doesn\'t') ~ ' exists within someOtherArray.')|join('\n') }}

输出非常相似的东西。

另见这个 Twig 小提琴:https://twigfiddle.com/dlxj9g