在 if 语句中可以使用 in_array 或类似的方法吗?

问题描述 投票:0回答:8

我使用 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 }} does not exist within someOtherArray.
    {% endif %}
{% endfor %}

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

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

有没有一种我还没有见过的方法来完成这个任务?

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

myVar

twig
8个回答
533
投票

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

{% if myVar is in_array(array_keys(someOtherArray)) %}
# or
{% if myVar in someOtherArray|keys %}

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


138
投票

只是为了澄清一些事情。 接受的答案与 PHP

in_array
不一样。

要执行与 PHP 相同的操作

in_array
,请使用以下表达式:

{% if myVar in myArray %}

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

{% if myVar not in myArray %}

45
投票

试试这个

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

11
投票

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

5
投票

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

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

如果有人需要通过 foreach 进行工作,

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

3
投票

应该对你有帮助。

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

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


1
投票

{% if myVar in myArray %} 没有键可以帮助我


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

您还可以使用数组映射并使用以下一行:
(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

© www.soinside.com 2019 - 2024. All rights reserved.