टहनी: 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 का सही उत्तर है। लेकिन आप जो करने की कोशिश कर रहे हैं उसे कंट्रोलर में करना चाहिए, न कि व्यू में! अपने सरणी को प्रारूपित करें और फिर सबसे अच्छी पठनीयता के लिए दृश्य को एक साफ चीज़ दें।
विवियन ऑक्ट

6
मुझे लगता है कि यह वास्तव में संदर्भ पर निर्भर करता है कि कौन सा तरीका अधिक समझ में आता है, क्या आपको नहीं लगता है?
मोच

जवाबों:


459

आपको बस अपने दूसरे कोड-ब्लॉक की दूसरी लाइन से बदलना होगा

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

सेवा

{% if myVar in someOtherArray|keys %}

में रोकथाम-ऑपरेटर और है कुंजी एक फिल्टर है कि रिटर्न एक सरणियों चाबियाँ।


109
यदि आप PHP में in_array () के समान ही प्राप्त करना चाहते हैं, तो कुंजियों को फ़िल्टर करें
Burgi

24
+ 1 और नकार भी है {% if item not in array %}और {% if not _entry.id in array %}इसलिए यह इससे अलग है {% if not var is null %}
इंसुसरनमेयर

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 में स्वीकृत उत्तर पर टिप्पणियों द्वारा कवर किया गया लगता है। यह उत्तर कुछ भी अतिरिक्त नहीं लगता है।
विलियम इस्टेड

7
@William Isted इस उत्तर को PHP की in_array()टहनी में करने का सही तरीका जोड़ता है ।
एल्विसदेव '

2
@IlliamIsted फिर उस स्वीकृत उत्तर को सही होने के लिए संपादित किया जाना चाहिए।
user1032531

3
यह बेहतर है कि टिप्पणियों में दिए गए उत्तरों को वास्तविक उत्तरों में बदल दिया जाए, क्योंकि टिप्पणियों को हटाए जाने की अधिक संभावना है।
नाथन आर्थर

^ - हटा दिया गया या बस नजरअंदाज कर दिया गया
Cid


10

@ जेक रहमान के बाद एक और उदाहरण:

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

अगर किसी को फ़ॉर्च के माध्यम से काम करने की आवश्यकता है, तो

{% for attachment in attachments %}
    {{ attachment in item['Attachments'][0] ? 'y' : 'n' }}
{% endfor %}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.