In Twig, check if a specific key of an array exists

PhpArraysTwigConditionalShort Circuiting

Php Problem Overview


In PHP we can check if a key exists in an array by using the function array_key_exists().

In the Twig templating language we can check if an variable or an object's property exists simply by using an if statement, like this:

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

But how do we check if a key of an array exists using Twig? I tried {% if array.key %}, but it gives me an error:

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

As one of the primary ways of passing data into a template is using arrays, it seems like there should be some way of doing this. Any thoughts?

Php Solutions


Solution 1 - Php

Twig example:

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

Solution 2 - Php

You can use the keys twig function

{% if myVar in someOtherArray|keys %}

Solution 3 - Php

Quick Answer (TL;DR)

  • DeveloperTLindel wants to test for existence of array key in Twig.
  • DeveloperTLindel wants to trap any errors associated with undefined key.
  • This can be handled using the default filter.

Detailed Answer

Context
  • Twig 2.x (latest version as of Wed 2017-03-08)
  • General-purpose use of the default filter.
Problem
  • Scenario:

  • DeveloperTLindel wants to test for existence of array key in Twig.

  • DeveloperTLindel wants to avoid any errors or exceptions caused by potentially undefined key.

Solution
  • DeveloperTLindel can use the default filter.
  • The default filter catches any exceptions owing to undefined variable, and allows short-circuit substition of an alternate value.
  • The default filter is chainable.
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') -%}

See also

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser852610View Question on Stackoverflow
Solution 1 - Phpphpisuber01View Answer on Stackoverflow
Solution 2 - PhpSamir PatelView Answer on Stackoverflow
Solution 3 - PhpdreftymacView Answer on Stackoverflow