在Twig中,检查是否存在数组的特定键

时间:2012-11-28 14:21:33

标签: php arrays twig conditional short-circuiting

在PHP中,我们可以使用函数array_key_exists()来检查数组中是否存在键。

在Twig模板语言中,我们可以通过使用if语句来检查变量或对象的属性是否存在,如下所示:

{% if app.user %}
do something here
{% else %}
do something else
{% endif %}

但是我们如何使用Twig检查数组的键是否存在?我试过了{% if array.key %},但它给了我一个错误:

Key "key" for array with keys "0, 1, 2, 3...648" does not exist

由于将数据传递到模板的主要方法之一是使用数组,似乎应该有一些方法来执行此操作。有什么想法吗?

3 个答案:

答案 0 :(得分:151)

Twig例子:

{% if array.key is defined %}
  // do something
{% else %}
  // do something else
{% endif %}

答案 1 :(得分:16)

您可以使用keys树枝功能

{% if myVar in someOtherArray|keys %}

答案 2 :(得分:1)

快速回答(TL; DR)

  • DeveloperTLindel想要测试Twig中是否存在数组键。
  • DeveloperTLindel想要捕获与未定义密钥相关的任何错误。
  • 可以使用default过滤器处理。

详细答案

上下文

  • Twig 2.x(截至2017-03-08周三的最新版本)
  • default过滤器的一般用途。

问题

  • 方案:
  • DeveloperTLindel想要测试Twig中是否存在数组键。
  • DeveloperTLindel希望避免因潜在的未定义密钥而导致的任何错误或异常。

解决方案

  • DeveloperTLindel可以使用default过滤器。
  • 由于未定义的变量,default过滤器捕获任何异常,并允许替换值的短路替换。
  • default过滤器是可链接的。

Example01


{#- ****************************************
  testing for a single key in associative array
  -#} 
  {%- set mystring = myarray['key-no-existo'] |default('__BLANK__')  -%}

{#- ****************************************
  testing for a multiple keys in associative array
  -#} 
  {%- set mystring = myarray['alpha']
        |default(myarray['bravo'])
        |default(myarray['charlie'])
        |default('__BLANK__')
        -%}

另见