我使用树枝作为模板引擎,我真的很喜欢它。然而,现在我遇到了一个肯定可以用比我发现的更简单的方法来完成的情况。

我现在拥有的是:

{% 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在测试函数?

谢谢你的帮助!


当前回答

你只需要改变你的第二个代码块的第二行

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

to

{% if myVar in someOtherArray|keys %}

In是容器操作符,keys是一个返回数组键的过滤器。

其他回答

你只需要改变你的第二个代码块的第二行

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

to

{% if myVar in someOtherArray|keys %}

In是容器操作符,keys是一个返回数组键的过滤器。

虽然上面的答案是正确的,但我发现了一些更用户友好的方法,而使用三元操作符。

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

如果有人需要完成foreach,

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

另一个关于@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 %}

{%如果myArray %}中的myVar没有键可以帮助我

它应该对你有帮助。

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

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