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

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

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

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

作为将数据传递到模板的主要方式之一是使用数组,似乎应该有一些这样做的方法。 有什么想法吗?

树枝例子:

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

你可以使用keysfunction

{% if myVar in someOtherArray|keys %}

快速回答(TL; DR)

  • DeveloperTLindel想要testingTwig中是否存在数组键。
  • DeveloperTLindel想要捕获与未定义密钥相关的任何错误。
  • 这可以使用defaultfilter来处理。

详细的答案

上下文

  • Twig 2.x(Wed 2017-03-08最新版本)
  • 一般用途的defaultfilter。

问题

  • 场景:
  • DeveloperTLindel想要testingTwig中是否存在数组键。
  • DeveloperTLindel希望避免由可能未定义的键导致的任何错误或exception。

  • DeveloperTLindel可以使用defaultfilter。
  • 由于未定义的variables, defaultfilter捕捉到任何exception,并允许替代值的短路替代。
  • defaultfilter是可链接的。

Example01


 {# -  ****************************************
  testing关联数组中的单个键
   - #} 
   {% -  set mystring = myarray ['key-no-existo'] | default('__ BLANK__') - %}

 {# -  ****************************************
  testing关联数组中的多个键
   - #} 
   {% - 设置mystring = myarray ['alpha']
         |默认(myArray的[ '喝彩'])
         |默认(myArray的[ '查理'])
         |默认( '__ BLANK__')
         - %}

也可以看看

  • SO:类似的问题与不存在或空variables有关
  • SO:一般用途的默认filter