树枝:in_array或if语句中可能的类似内容?


207

我使用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?

谢谢你的帮助!


3
Яaffael1984有正确的答案。但是,您要尝试执行的操作应该在控制器中完成,而不是在视图中完成!格式化数组,然后为视图提供干净的东西以实现最佳可读性。
薇薇安(Vivien)2012年

6
我想这真的取决于上下文,哪种方式更有意义,您不认为吗?
扭伤

Answers:


459

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

{% if myVar is in_array(array_keys(someOtherArray)) %}

{% if myVar in someOtherArray|keys %}

in是containment-operator,并为过滤器键,该过滤器返回数组键。


109
如果你想要达到相同PHP in_array(),ommit键过滤器
BURGI

24
+1而且否定{% if item not in array %}与否{% if not _entry.id in array %},因此与此不同{% if not var is null %}
insertusername此处

8
您还可以使用Defined{% if someOtherArray.myVar is defined %}twig.sensiolabs.org/doc/tests/defined.html
紧密

90

只是为了清除此处的某些内容。接受的答案与PHP in_array不同

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

{% if myVar in myArray %}

如果要否定此参数,则应使用以下命令:

{% if myVar not in myArray %}

1
早在2012年,关于接受答案的评论似乎涵盖了这两点。这个答案似乎并没有增加任何额外的内容。
威廉·伊斯特

7
@William Isted这个答案增加了in_array()在树枝中执行PHP的正确方法。
elvismdev

2
@WilliamIsted然后应编辑该接受的答案以正确。
user1032531

3
最好将注释中给出的答案转换为实际答案,因为注释更可能被删除。
内森·亚瑟

^-已删除或被忽略
Cid


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


0

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

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

如果有人需要完成foreach,

{% for attachment in attachments %}
    {{ attachment in item['Attachments'][0] ? 'y' : 'n' }}
{% endfor %}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.