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

spr*_*ain 194 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 %}
Run Code Online (Sandbox Code Playgroud)

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

{% 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 %}
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这一点,我还没有看到呢?

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

谢谢你的帮助!

Raf*_*ael 440

您只需要更改第二个代码块的第二行

{% if myVar is in_array(array_keys(someOtherArray)) %}
Run Code Online (Sandbox Code Playgroud)

{% if myVar in someOtherArray|keys %}
Run Code Online (Sandbox Code Playgroud)

in是包含运算符,并键入一个返回数组键的过滤器.

  • 如果要在PHP中实现与in_array()相同的功能,请省略键过滤器 (107认同)
  • + 1并且否定是`{%if if item not in array%}`而不是`{%if if not _entry.id in array%}`,所以它与``{%if not not var is null%}不同` . (24认同)
  • 您还可以使用以下定义:`{%if someOtherArray.myVar is defined%}`(http://twig.sensiolabs.org/doc/tests/defined.html) (8认同)

Wim*_*ans 85

只是为了清除这里的一些事情.接受的答案与PHP in_array不同.

要像PHP in_array一样使用以下表达式:

{% if myVar in myArray %}
Run Code Online (Sandbox Code Playgroud)

如果你想否定这个,你应该使用这个:

{% if myVar not in myArray %}
Run Code Online (Sandbox Code Playgroud)

  • @William Isted这个答案增加了在twig中执行PHP的`in_array()`的正确方法. (7认同)
  • 最好将注释中给出的答案转换为实际答案,因为注释更可能被删除。 (3认同)
  • @WilliamIsted然后应编辑该接受的答案以正确。 (2认同)

Dun*_*ung 10

@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 %}
Run Code Online (Sandbox Code Playgroud)


Art*_*lov 8

尝试这个

{% if var in ['foo', 'bar', 'beer'] %}
    ...
{% endif %}
Run Code Online (Sandbox Code Playgroud)


sh6*_*210 5

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

{{ attachment in item['Attachments'][0] ? 'y' : 'n' }}
Run Code Online (Sandbox Code Playgroud)

如果有人需要解决foreach,那么:

{% for attachment in attachments %}
    {{ attachment in item['Attachments'][0] ? 'y' : 'n' }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)