Estou usando o Twig como mecanismo de modelagem e estou realmente adorando. No entanto, agora corri em uma situação que definitivamente deve ser realizada de uma maneira mais simples do que encontrei.
O que tenho agora é o seguinte:
{% for myVar in someArray %}
{% set found = 0 %}
{% for id, data in someOtherArray %}
{% if id == myVar %}
{{ myVar }} exists within someOtherArray.
{% set found = 1 %}
{% endif %}
{% endfor %}
{% if found == 0 %}
{{ myVar }} doesn't exist within someOtherArray.
{% endif %}
{% endfor %}
O que estou procurando é algo mais ou menos assim:
{% for myVar in someArray %}
{% if myVar is in_array(array_keys(someOtherArray)) %}
{{ myVar }} exists within someOtherArray.
{% else %}
{{ myVar }} doesn't exist within someOtherArray.
{% endif %}
{% endfor %}
Existe uma maneira de conseguir isso que eu ainda não vi?
Se eu precisar criar minha própria extensão, como posso acessar o myVar na função de teste?
Obrigado pela ajuda!
Respostas:
Você só precisa alterar a segunda linha do seu segundo bloco de código de
para
em é o operador de confinamento e codifica um filtro que retorna as chaves de uma matriz.
fonte
{% if item not in array %}
e não{% if not _entry.id in array %}
, então é diferente disso{% if not var is null %}
.{% if someOtherArray.myVar is defined %}
( twig.sensiolabs.org/doc/tests/defined.html )Só para esclarecer algumas coisas aqui em cima. A resposta que foi aceita não faz o mesmo que PHP in_array do .
Para fazer o mesmo que PHP in_array, use a seguinte expressão:
Se você quiser negar isso, use:
fonte
in_array()
no galho.Tente isto
fonte
outro exemplo a seguir @jake stayman:
fonte
Isso deve ajudá-lo.
Mais informações: http://twig.sensiolabs.org/doc/tags/for.html
fonte
Embora as respostas acima estejam corretas, achei uma abordagem mais amigável ao usar o operador ternário.
Se alguém precisar trabalhar com o foreach então,
fonte