Twig: in_array หรือคล้ายกันที่เป็นไปได้ภายใน if statement?


207

ฉันใช้Twigเป็นเครื่องมือสร้างแรงบิดและฉันก็ชอบมันมาก อย่างไรก็ตามตอนนี้ฉันทำงานในสถานการณ์ที่ต้องสามารถทำได้ในแบบที่ง่ายกว่าที่ฉันพบ

สิ่งที่ฉันมีตอนนี้คือ:

{% 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มีคำตอบที่ถูกต้อง แต่สิ่งที่คุณพยายามทำควรทำในคอนโทรลเลอร์ไม่ใช่ในมุมมอง! จัดรูปแบบอาร์เรย์ของคุณจากนั้นให้มุมมองที่ชัดเจนสำหรับการอ่านที่ดีที่สุด
วิเวียน

6
ฉันคิดว่ามันขึ้นอยู่กับบริบทที่เหมาะสมกว่าคุณไม่คิดอย่างนั้นหรือ
แพลง

คำตอบ:


459

คุณเพียงแค่ต้องเปลี่ยนบรรทัดที่สองของบล็อกโค้ดที่สองของคุณจาก

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

ถึง

{% if myVar in someOtherArray|keys %}

ในเป็นตัวดำเนินการบรรจุและปุ่มตัวกรองที่ส่งกลับคีย์อาร์เรย์


109
หากคุณต้องการบรรลุเช่นเดียวกับ in_array () ใน PHP, ommit the keys filter
Burgi

24
+ 1 และยังปฏิเสธเป็น{% if item not in array %}และไม่ได้ดังนั้นจึงเป็นเรื่องที่แตกต่างจากนี้{% if not _entry.id in array %} {% if not var is null %}
insertusernamehere

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 คำตอบนี้เพิ่มวิธีที่ถูกต้องในการทำ PHP in_array()ในทวิก
elvismdev

2
@WilliamIsted จากนั้นคำตอบที่ได้รับการยอมรับควรแก้ไขให้ถูกต้อง
user1032531

3
เป็นการดีกว่าที่คำตอบในความคิดเห็นจะเปลี่ยนเป็นคำตอบจริงเนื่องจากความคิดเห็นมีแนวโน้มที่จะถูกลบทิ้งไป
นาธานอาร์เธอร์

^ - ถูกลบหรือไม่สนใจ
Cid




0

แม้ว่าคำตอบข้างต้นนั้นถูกต้อง แต่ฉันพบบางสิ่งที่เป็นมิตรกับผู้ใช้มากกว่าในขณะที่ใช้ผู้ประกอบการที่ประกอบไปด้วยไตรภาค

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

หากใครบางคนจำเป็นต้องทำงานผ่านก่อนแล้ว

{% for attachment in attachments %}
    {{ attachment in item['Attachments'][0] ? 'y' : 'n' }}
{% endfor %}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.