Twig:in_数组或类似的if语句?

Twig:in_数组或类似的if语句?,twig,Twig,我使用的模板引擎,我真的很喜欢它。然而,现在我遇到的情况肯定比我发现的更简单 我现在得到的是: {% for myVar in someArray %} {% set found = 0 %} {% for id, data in someOtherArray %} {% if id == myVar %} {{ myVar }} exists within someOtherArray. {% set fo

我使用的模板引擎,我真的很喜欢它。然而,现在我遇到的情况肯定比我发现的更简单

我现在得到的是:

{% 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 %}
{% for myVar in someArray %}    
    {% if myVar in someOtherArray|keys %}
       {{ myVar }} exists within someOtherArray.
    {% else %}
       {{ myVar }} doesn't exist within someOtherArray.
    {% endif %}
{% endfor %}
有没有一种我还没有见过的方法可以实现这一点

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


谢谢你的帮助

您只需将第二个代码块的第二行从

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


是一个包含操作符和一个过滤器,返回数组键。

只是为了清除这里的一些内容。接受的答案与_array中的PHP不同

要在数组中执行与PHP相同的操作,请使用以下表达式:

{% if myVar in myArray %}
如果你想否定这一点,你应该使用:

{% if myVar not in myArray %}

另一个例子是@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 %}
{%用于键,row.divs%中的项]
{%if(键不在[1,2,9])%}//消除元素1,2,9
  • {{item}}
  • {%endif%} {%endfor%}
    它应该对您有所帮助

    {% for user in users if user.active and user.id not 1 %}
       {{ user.name }}
    {% endfor %}
    
    更多信息:

    试试这个

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

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

    {{ attachment in item['Attachments'][0] ? 'y' : 'n' }}
    
    如果有人需要通过foreach工作

    {% for attachment in attachments %}
        {{ attachment in item['Attachments'][0] ? 'y' : 'n' }}
    {% 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 %}
    
    {% for myVar in someArray %}    
        {% if myVar in someOtherArray|keys %}
           {{ myVar }} exists within someOtherArray.
        {% else %}
           {{ myVar }} doesn't exist within someOtherArray.
        {% endif %}
    {% endfor %}
    
    ()

    您还可以使用并拥有以下一行:
    (细枝>=1.41或>=2.10或任何3.x版本)

    它的输出非常相似


    还可以看到这个小树枝:

    如果你想实现与PHP中的数组()相同的效果,那么就使用键过滤器+1,并且否定是
    {%If item not in array%}
    {%If not{u entry.id in array%}
    ,因此它不同于
    {%If not var is null%}
    。你也可以使用defined:
    {%如果定义了someOtherArray.myVar%}
    ()下面是一个基于OP代码和此答案中的代码的完整解决方案:Яaffael1984的答案是正确的。但您试图做的事情应该在控制器中完成,而不是在视图中!格式化您的数组,然后为视图提供一个干净的东西以获得最佳可读性。我想这确实取决于ntext哪种方式更有意义,你不认为吗?这两点似乎已经在2012年被接受的答案的评论中被涵盖。这个答案似乎没有添加任何额外内容。@William Isted这个答案添加了正确的方法来执行PHP的
    in_array()
    在twig中。@WilliamIsted然后,接受的答案应该被编辑为正确的。最好将注释中给出的答案转换为实际答案,因为注释更可能被删除。^--删除或干脆忽略。我不知道为什么这个答案得不到投票。而这一行代码是您可以拥有的最小且完美的代码现在。例如,在For循环中使用
    {{cfg.static_site中的item.value?'checked=“checked”:'}}
    (检查该数组中是否存在特定项)将检查该项。在Twig 2.10中不推荐在For标记上添加if条件。在“For”正文中改用过滤器或“if”条件(如果您的条件取决于循环内更新的变量)。