it-swarm.asia

غصين: in_array أو ما شابه ذلك ممكن داخل إذا البيان؟

أنا باستخدام غصين كمحرك templating وأنا حقا أحب ذلك. ومع ذلك ، فقد قمت الآن بالركض في موقف يجب بالتأكيد تحقيقه بطريقة أبسط مما وجدته.

ما لدي الآن هو هذا:

{% 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 داخل وظيفة الاختبار؟

شكرا لمساعدتك!

180
sprain

عليك فقط تغيير السطر الثاني من كتلة التعليمات البرمجية الثانية الخاصة بك من

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

إلى

{% if myVar in someOtherArray|keys %}

في هو مشغل الاحتواء و مفاتيح عامل تصفية يُرجع مفاتيح المصفوفات.

412
Raffael

فقط لمسح بعض الأشياء هنا. الإجابة التي تم قبولها لا تفعل نفس الشيء مثل PHP in_array .

للقيام بنفس الشيء مثل PHP in_array استخدم التعبير التالي:

{% if myVar in myArray %}

إذا كنت تريد إلغاء هذا ، فيجب عليك استخدام هذا:

{% if myVar not in myArray %}
74
Wim Mostmans

مثال آخر يتابع @ 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 %}
9
Dung

جرب هذا

{% if var in ['foo', 'bar', 'beer'] %}
    ...
{% endif %}
2
Arthur Veselov

يجب أن تساعدك.

{% for user in users if user.active and user.id not 1 %}
   {{ user.name }}
{% endfor %}

مزيد من المعلومات: http://twig.sensiolabs.org/doc/tags/for.html

1
FDisk