Dal: in_array veya benzeri if ifadesinde mümkün mü?


207

Twig'i temperleme motoru olarak kullanıyorum ve gerçekten çok seviyorum. Ancak, şimdi kesinlikle bulduğumdan daha basit bir şekilde başarılması gereken bir durumda koştum.

Şu anda sahip olduğum şey şu:

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

Ne arıyorum daha böyle bir şey:

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

Henüz görmediğim bir şey yapmanın bir yolu var mı?

Kendi uzantımı oluşturmam gerekirse test fonksiyonunda myVar'a nasıl erişebilirim?

Yardımınız için teşekkürler!


3
Яaffael1984 doğru cevaba sahip. Ama yapmaya çalıştığınız şey görünümde değil, kontrolörde yapılmalıdır! Dizinizi biçimlendirin ve ardından en iyi okunabilirlik için görünüme temiz bir şey verin.
Vivien

6
Sanırım gerçekten hangi anlamda daha mantıklı olan bağlama bağlı, değil mi?
burkulma

Yanıtlar:


459

Sadece ikinci kod bloğunuzun ikinci satırını

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

için

{% if myVar in someOtherArray|keys %}

olarak muhafaza operatör ve bir anahtar , bir filtre bu döner bir diziler anahtarlar.


109
PHP'de in_array () ile aynı şeyi elde etmek istiyorsanız, anahtar filtresini ommit edin
Burgi

24
+ 1 Ayrıca olumsuzlama da öyle {% if item not in array %}değil {% if not _entry.id in array %}, bu yüzden bundan farklı {% if not var is null %}.
insertusernameburada

8
Ayrıca aşağıdakileri de kullanabilirsiniz: {% if someOtherArray.myVar is defined %}( twig.sensiolabs.org/doc/tests/defined.html )
sıkı

90

Buradaki bazı şeyleri temizlemek için. Kabul edilen cevap PHP in_array ile aynı değildir .

PHP in_array ile aynı işlemi yapmak için aşağıdaki ifadeyi kullanın:

{% if myVar in myArray %}

Bunu reddetmek istiyorsanız bunu kullanmalısınız:

{% if myVar not in myArray %}

1
Bu iki noktanın 2012'de kabul edilen cevap hakkındaki yorumlar tarafından ele alındığı görülüyor. Bu cevap ekstra bir şey eklemiyor gibi görünüyor.
William Isted

7
@William Isted bu cevabı, PHP'yi dallamak için doğru yolu ekliyor in_array().
elvismdev

2
@WilliamIsted Kabul edilen cevap doğru olacak şekilde düzenlenmelidir.
user1032531

3
Yorumlarda verilen cevapların gerçek cevaplara dönüştürülmesi daha iyidir, çünkü yorumların silinme olasılığı daha yüksektir.
Nathan Arthur

^ - silindi veya basitçe yok sayıldı
Cid


10

@jake stayman'ın ardından gelen başka bir örnek:

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


0

Yukarıdaki cevaplar doğru olsa da, üçlü operatör kullanırken daha kullanıcı dostu bir yaklaşım buldum.

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

Birisinin foreach ile çalışması gerekiyorsa,

{% for attachment in attachments %}
    {{ attachment in item['Attachments'][0] ? 'y' : 'n' }}
{% endfor %}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.