Como definir membro de uma matriz já existente do Twig?
Eu tentei fazer da próxima maneira:
{% set arr['element'] = 'value' %}
mas eu recebi o seguinte erro:
Token inesperado "pontuação" do valor "[" ("fim do bloco de instruções" esperado) em ...
.
e[]
são muito parecidos em Twig e eu estava errado. Eu procurei e editei minha resposta.'element'
. Encontrei a resposta do @ LivaX abaixo. Então seria{% set arr = arr|merge({(key): 'value'}) %}
.{{ UI.button({'type':'submit'}) }}
e todas essas macros usam | mesclagem para definir parâmetros padrão, portanto, há uma necessidade lógica para isso ...Corri para esse problema, mas estava tentando criar índices inteiros em vez de índices associativos como 'elemento'.
Você também precisa proteger sua chave de índice
()
usando o filtro de mesclagem:Agora você pode adicionar uma chave de índice personalizada, como
('element'~loop.index0)
fonte
Se a inicialização precisar apenas:
fonte
Tentei a resposta do @LivaX, mas ela não funciona, mesclando uma matriz em que as chaves numéricas não funcionam ( https://github.com/twigphp/Twig/issues/789 ).
Isso funcionará apenas quando as chaves forem strings
O que fiz foi recriar outra tabela (
temp
) da tabela inicial (t
) e transformar as chaves em uma string, por exemplo:t
teclas: 0, 1, 2 ..temp
teclas: 0_, 1_, 2_ ....fonte
Obrigado por esta discussão - eu também fui capaz de criar uma matriz com (loop.index0) e enviar para o galho.
fonte
Achei esse problema muito irritante, e minha solução talvez seja ortodoxa e não esteja de acordo com a filosofia Twig, mas desenvolvi o seguinte:
que pode ser usado da seguinte maneira:
{% set arr = set_element (arr, 'elemento', 'valor')%}
fonte
Basta usar isso como
{% set arr={'key':'value'} %}
(sem espaço em branco após o:
), ele funciona bem.Mas quando eu o uso dentro de um loop for, para torná-lo um array, ele não funciona fora do escopo for.
fonte
Eu tinha uma matriz multidimensional. A única solução que eu pude descobrir é criar uma nova matriz temporária e atualizar / adicionar as informações, que foram repassadas para outra função de ramificação.
fonte
Eu tive esse problema há algum tempo. Imagine que você tem uma matriz como esta:
Portanto, você deseja mostrar esses dados em duas linhas, mas remova a senha dessa lista. Para isso, dividir em duas matrizes será fácil com o
slice
filtro. No entanto, temos que remover a senha. Por esse motivo, estou usando esse trecho. A idéia é colocar todos os elementos menores que odata
tamanho dos elementos dividido por 2. Para calcular isso, usamos o filtrolength
. Agora, para obter o índice do elemento atual que utilizamosloop.index
. E, finalmente, pressionamos um elemento associativo na matriz esquerda ou direita. Uma matriz associativa possui dois componenteskey
evalue
. Para referenciar uma chave de matriz no twit we operator()
e usamos omerge
filtro para empurrar para dentro da matriz, como mostrado aqui{% set left_list = left_list|merge({ (key): value }) %}
Esta é a solução completa.
fonte
Você também pode usar a seguinte sintaxe:
fonte