나뭇 가지 : if 문 내에서 in_array 또는 이와 비슷한가?


207

내가 사용하고 나뭇 가지 엔진을하는 주형으로하고 정말 사랑하고있다. 그러나 이제는 내가 찾은 것보다 더 간단한 방법으로 달성 할 수있는 상황에서 뛰었습니다.

내가 지금 가지고있는 것은 이것입니다 :

{% 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 %}

내가 찾고있는 것은 다음과 같습니다.

{% 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 %}

아직 보지 못한 이것을 달성 할 수있는 방법이 있습니까?

내 확장을 만들어야하는 경우 테스트 함수 내에서 myVar에 어떻게 액세스 할 수 있습니까?

당신의 도움을 주셔서 감사합니다!


3
Яaffael1984가 정답입니다. 그러나 당신이하려고하는 것은보기가 아닌 컨트롤러에서 수행되어야합니다! 배열을 포맷 한 다음 최상의 가독성을 위해보기에 깨끗한 것을 제공하십시오.
Vivien

6
나는 그것이 어떤 방식이 더 의미가 있는지 상황에 달려 있다고 생각합니다.
염좌

답변:


459

두 번째 코드 블록의 두 번째 줄을

{% if myVar is in_array(array_keys(someOtherArray)) %}

{% if myVar in someOtherArray|keys %}

in 은 포함 연산자이며 는 배열 키를 반환하는 필터입니다.


109
PHP에서 in_array ()와 동일한 결과를 얻으려면 키 필터를 생략하십시오
Burgi

24
+ 1 또한 부정은 {% if item not in array %}아니므 {% if not _entry.id in array %}로 이것과 다릅니다 {% if not var is null %}.
insertusername 여기

8
당신은 정의 사용할 수 있습니다 {% if someOtherArray.myVar is defined %}( twig.sensiolabs.org/doc/tests/defined.html )

90

여기에 몇 가지를 정리하십시오. 수락 된 답변은 PHP in_array 와 동일하지 않습니다 .

PHP in_array 와 동일하게 하려면 다음 표현식을 사용하십시오.

{% if myVar in myArray %}

이것을 부정하려면 다음을 사용해야합니다.

{% if myVar not in myArray %}

1
이 두 가지 요점은 2012 년에 승인 된 답변에 대한 의견에 포함 된 것으로 보입니다.이 답변에는 추가 내용이없는 것 같습니다.
William Isted

7
@William Isted이 답변 in_array()은 나뭇 가지에서 PHP를 수행하는 올바른 방법을 추가합니다 .
elvismdev

2
@WilliamIsted 그런 다음 수락 된 답변을 수정하여 수정해야합니다.
user1032531

3
주석이 삭제 될 가능성이 훨씬 높으므로 주석에 제공된 답변을 실제 답변으로 바꾸는 것이 좋습니다.
Nathan Arthur

^-삭제되거나 단순히 무시 됨
Cid


10

@jake stayman 다음에 오는 또 다른 예 :

{% for key, item in row.divs %}
    {% if (key not in [1,2,9]) %} // eliminate element 1,2,9
        <li>{{ item }}</li>
    {% endif %}
{% endfor %}


0

위의 답변이 옳았지만 삼항 연산자를 사용하는 동안 더 사용자 친화적 인 접근법을 발견했습니다.

{{ attachment in item['Attachments'][0] ? 'y' : 'n' }}

누군가 foreach를 통해 작업해야하는 경우

{% for attachment in attachments %}
    {{ attachment in item['Attachments'][0] ? 'y' : 'n' }}
{% endfor %}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.