【问题标题】:In Twig, check if a specific key of an array exists在 Twig 中,检查数组的特定键是否存在
【发布时间】:2012-11-16 10:22:17
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • Twig 只是一个模板引擎。你知道吗?
  • 你可以使用“属性”函数:twig.sensiolabs.org/doc/functions/attribute.html {% if attribute(array, key) is defined %} // 做一些事情 {% endif %}
  • @Vega 您应该将其添加为答案,因为它似乎是检查不是单个单词的键的唯一方法,例如data-value

标签: php arrays twig conditional short-circuiting


【解决方案1】:

树枝示例:

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

【讨论】:

  • 为什么我们不能只使用{% if array.key %}?它出什么问题了?在 JS 中这是完全有效的声明,但在 Twig 中却不是!
  • {% if array.key %} 有效,但它是检查数组键是否为空的语法。 twig.sensiolabs.org/doc/tags/if.html#if
  • 如果key是变量,需要使用{% if array[ key ] %}或者{% if array[ key ] is defined %}array.key 尝试访问数组中的索引 'key'。
【解决方案2】:

你可以使用keystwig函数

{% if myVar in someOtherArray|keys %}

【讨论】:

  • 这为我完成了工作,你!
  • 如果在循环中使用这很糟糕...有更好的答案,例如使用“已定义”...例如{% if someOtherArray[myVar] 被定义 %}
  • 这在密钥不是机器友好的情况下效果更好。例如。数组['不友好']
  • 如果你使用动态键名,这个答案是最好的。
【解决方案3】:

快速解答 (TL;DR)

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

详细解答

上下文

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

问题

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

解决方案

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

示例01

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

另见

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-25
    • 2011-05-29
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 2013-09-17
    • 2015-12-27
    • 2011-10-22
    相关资源
    最近更新 更多