Twig: in_array hoặc tương tự có thể có trong câu lệnh if?


207

Tôi đang sử dụng Twig làm công cụ tạo khuôn mẫu và tôi thực sự yêu thích nó. Tuy nhiên, bây giờ tôi đã chạy trong một tình huống chắc chắn phải hoàn thành theo cách đơn giản hơn tôi đã tìm thấy.

Những gì tôi có ngay bây giờ là đây:

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

Những gì tôi đang tìm kiếm là một cái gì đó như thế này:

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

Có cách nào để thực hiện điều này mà tôi chưa thấy?

Nếu tôi cần tạo tiện ích mở rộng của riêng mình, làm cách nào tôi có thể truy cập myVar trong chức năng kiểm tra?

Cảm ơn bạn đã giúp đỡ!


3
Affael1984 có câu trả lời đúng. Nhưng những gì bạn đang cố gắng làm nên được thực hiện trong bộ điều khiển, không phải trong chế độ xem! Định dạng mảng của bạn và sau đó cung cấp một điều rõ ràng cho chế độ xem để dễ đọc nhất.
Vivien

6
Tôi cho rằng nó thực sự phụ thuộc vào bối cảnh mà cách nào có ý nghĩa hơn, bạn không nghĩ sao?
bong gân

Câu trả lời:


459

Bạn chỉ cần thay đổi dòng thứ hai của khối mã thứ hai từ

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

đến

{% if myVar in someOtherArray|keys %}

trong là toán tử ngăn chặn và khóa một bộ lọc trả về các khóa mảng.


109
Nếu bạn muốn đạt được tương tự như in_array () trong PHP, hãy sử dụng bộ lọc khóa
Burgi

24
+ 1 Và cả phủ định là {% if item not in array %}và không {% if not _entry.id in array %}, vì vậy nó khác với điều này {% if not var is null %}.
insertusernamehere

8
Bạn cũng có thể sử dụng được xác định: {% if someOtherArray.myVar is defined %}( twig.sensiolabs.org/doc/tests/d xác.html )
chặt chẽ vào

90

Chỉ để xóa một số điều ở đây. Câu trả lời đã được chấp nhận không làm như PHP in_array .

Để làm tương tự như PHP in_array, hãy sử dụng biểu thức sau:

{% if myVar in myArray %}

Nếu bạn muốn phủ nhận điều này, bạn nên sử dụng điều này:

{% if myVar not in myArray %}

1
Hai điểm này dường như đã được bao phủ bởi các ý kiến ​​về câu trả lời được chấp nhận trở lại vào năm 2012. Câu trả lời này dường như không thêm bất cứ điều gì thêm.
William Isted

7
@William Isted câu trả lời này thêm cách đúng để làm PHP in_array()trong twig.
elvismdev

2
@WilliamIsted Sau đó, câu trả lời được chấp nhận nên được chỉnh sửa để chính xác.
dùng1032531

3
Tốt hơn là các câu trả lời trong các bình luận được chuyển thành các câu trả lời thực tế, vì các bình luận có nhiều khả năng bị xóa.
Nathan Arthur

^ - đã xóa hoặc đơn giản là bị bỏ qua
Cid


10

một ví dụ khác sau @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

Mặc dù các câu trả lời trên là đúng, tôi đã tìm thấy một cách tiếp cận thân thiện hơn với người dùng trong khi sử dụng toán tử ternary.

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

Nếu ai đó cần phải làm việc qua foreach sau đó,

{% for attachment in attachments %}
    {{ attachment in item['Attachments'][0] ? 'y' : 'n' }}
{% endfor %}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.