145 votes

Fixer l'élément d'un tableau à partir de Twig

Comment puis-je définir le membre d'un tableau déjà existant à partir de Twig ?

J'ai essayé de le faire de la manière suivante :

{% set arr['element'] = 'value' %}

mais j'ai obtenu l'erreur suivante :

Unxpected token "punctuation" of value "[" ("end of statement block") attendu) dans ...

247voto

Paulpro Points 54844

Il n'y a pas de moyen agréable de faire cela dans Twig. C'est cependant possible en utilisant le filtre de fusion :

{% set arr = arr|merge({'element': 'value'}) %}

Si element est une variable, il faut l'entourer de parenthèses :

{% set arr = arr|merge({(element): 'value'}) %}

0 votes

L'instruction "." est identique à "[]", ce n'est donc pas la solution.

0 votes

@falinsky Vous avez raison. . y [] sont très similaires dans Twig et j'avais tort. J'ai vérifié et modifié ma réponse.

19 votes

Je cherchais un moyen de définir la variable dynamique key en remplacement de la variable 'element' . J'ai trouvé la réponse de @LivaX ci-dessous. Donc, ce serait {% set arr = arr|merge({(key): 'value'}) %} .

84voto

LivaX Points 171

J'ai rencontré ce problème mais j'essayais de créer des index entiers au lieu d'index associatifs comme 'element'.

Vous devez protéger votre clé d'indexation avec () en utilisant également le filtre de fusion :

{% set arr = arr|merge({ (loop.index0): 'value'}) %} 

Vous pouvez maintenant ajouter une clé d'indexation personnalisée comme ('element'~loop.index0)

0 votes

C'est la solution actuelle lorsque vous essayez d'insérer des clés dynamiquement, merci LivaX !

16voto

Уmed Points 3410

Si l'initialisation est seulement nécessaire :

{% set items = { 'apple': 'fruit', 'orange': 'fruit', 'peugeot': 'unknown' } %}

16 votes

Ce n'était pas la question.

5voto

zizoujab Points 1533

J'ai essayé la réponse de @LivaX mais cela ne fonctionne pas, fusionner un tableau dont les clés sont numériques ne fonctionne pas ( https://github.com/twigphp/Twig/issues/789 ).

Cela ne fonctionnera que si les clés sont des chaînes de caractères

Ce que j'ai fait, c'est recréer une autre table ( temp ) à partir du tableau initial ( t ) et faire en sorte que les clés soient des chaînes de caractères, par exemple :

{% for key , value in t%}
{% set temp= temp|merge({(key~'_'):value}) %}
{% endfor %}

t touches : 0 , 1 , 2

temp touches : 0_, 1_ , 2_ ....

0 votes

Même problème, aucune solution jusqu'à présent.

3voto

GarryOne Points 485

Vous pouvez également utiliser la syntaxe suivante :

{% set myArray = myArray + myArray2 %}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X