93

在 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

由于将数据传递到模板的主要方法之一是使用数组,因此似乎应该有某种方法可以做到这一点。有什么想法吗?

4

3 回答 3

214

树枝示例:

{% if array.key is defined %}
  // do something
{% else %}
  // do something else
{% endif %}
于 2012-11-28T14:29:20.090 回答
33

您可以使用keys树枝功能

{% if myVar in someOtherArray|keys %}

于 2017-01-23T21:23:06.670 回答
3

快速回答 (TL;DR)

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

详细解答

语境

  • Twig 2.x(截至 2017 年 3 月 8 日星期三的最新版本)
  • default过滤器的通用用途。

问题

  • 设想:
  • DeveloperTLindel 想要测试 Twig 中是否存在数组键。
  • DeveloperTLindel 希望避免由可能未定义的键引起的任何错误或异常。

解决方案

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

Example01

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

{#- ****************************************
  测试关联数组中的多个键
  -#}
  {%- 设置 mystring = myarray['alpha']
        |default(myarray['bravo'])
        |默认(myarray['charlie'])
        |default('__BLANK__')
        -%}

也可以看看

于 2017-03-08T18:12:40.047 回答