web-dev-qa-db-ja.com

Twigで、配列の特定のキーが存在するかどうかを確認します

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

データをテンプレートに渡す主な方法の1つは配列を使用することであるため、これを行う何らかの方法があるはずです。何かご意見は?

65
user852610

小枝の例:

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

keys twig関数を使用できます

{% if myVar in someOtherArray|keys %}

17
Samir Patel

クイックアンサー(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__ ')-%} 
 
 {#-*********************************** ******** 
連想配列の複数キーのテスト
-#} 
 {%-set mystring = myarray ['alpha'] 
 | default(myarray ['bravo'])
 | default(myarray ['charlie'])
 | default( '__ BLANK __')
-%} 
 

こちらもご覧ください

1
dreftymac