foreach में पहला और आखिरी एलिमेंट कैसे पाएं? 3 कारगर तरीके

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

foreach लूप में पहला और आखिरी एलिमेंट: PHP डेवलपर की सबसे बड़ी समस्या

\n\n

एक स्थिति की कल्पना करें: आप एक ऑनलाइन स्टोर में प्रोडक्ट्स की लिस्ट दिखा रहे हैं। पहले प्रोडक्ट पर "बेस्टसेलर" का टैग लगाना है, और आखिरी पर "नया आइटम"। या फिर, आप XML फीड बना रहे हैं जहां पहले और आखिरी एलिमेंट को अलग टैग में रैप करना है। PHP में यह कैसे करें? यह काम आसान लगता है, लेकिन Stack Overflow पर इस सवाल के हज़ारों व्यूज़ और दर्जनों समाधान मौजूद हैं।

\n\n

इतनी सरल दिखने वाली समस्या पर इतनी बहस क्यों? इसकी वजह यह है कि PHP का foreach एक इटरेटर है जो इटरेशन नंबर बताने का कोई बिल्ट-इन तरीका नहीं देता। for लूप के विपरीत, जहां हमारे पास $i काउंटर होता है, foreach में हम सिर्फ की और वैल्यू के साथ काम करते हैं। यहीं से जादू शुरू होता है: कोई काउंटर का उपयोग करता है, कोई reset() और end() फंक्शन का, और कोई ऐरे पॉइंटर्स के साथ चालाकी करता है।

\n\n

इस लेख में हम तीन मुख्य तरीकों पर चर्चा करेंगे जिनसे foreach में पहली और आखिरी इटरेशन को पहचाना जा सकता है। हम उनकी परफॉरमेंस, पठनीयता और विश्वसनीयता की तुलना करेंगे। आप जानेंगे कि किसी विशेष कार्य के लिए कौन सा तरीका चुनना है और सामान्य गलतियों से कैसे बचना है। चलिए शुरू करते हैं!

\n\n

तरीका 1: क्लासिक काउंटर (सबसे आसान)

\n\n

सबसे सहज तरीका है एक काउंटर वेरिएबल बनाना और उसे ऐरे के कुल एलिमेंट्स से तुलना करना। इस विधि को अक्सर "पुराना तरीका" कहा जाता है, लेकिन यह बिना किसी समस्या के काम करता है।

\n\n
<?php\n$items = ['सेब', 'केला', 'चेरी', 'तरबूज'];\n$total = count($items);\n$counter = 0;\n\nforeach ($items as $item) {\n    $counter++;\n    if ($counter === 1) {\n        echo "<strong>पहला: $item</strong><br>";\n    } elseif ($counter === $total) {\n        echo "<em>आखिरी: $item</em><br>";\n    } else {\n        echo "$item<br>";\n    }\n}\n?>
\n\n

फायदे:

\n
    \n
  • बेहद साफ लॉजिक — कोई भी नौसिखिया एक नज़र में कोड समझ जाएगा।
  • \n
  • ऐरे की की के प्रकार पर निर्भर नहीं करता (एसोसिएटिव और न्यूमेरिक दोनों के साथ काम करता है)।
  • \n
  • आसानी से बदला जा सकता है: दूसरी या अंतिम से पहली इटरेशन चेक करनी है? बस कंडीशन बदलें।
  • \n
\n\n

नुकसान:

\n
    \n
  • पूरे ऐरे पर count() कॉल करना पड़ता है — माइक्रो-ओवरहेड, लेकिन बड़े ऐरे (लाखों एलिमेंट) पर यह ध्यान देने योग्य हो सकता है।
  • \n
  • लूप से पहले काउंटर को इनिशियलाइज़ करना न भूलें।
  • \n
  • अगर ऐरे खाली है, तो $total 0 होगा और $counter === $total कभी सही नहीं होगा (यह तार्किक है, लेकिन नौसिखिए अक्सर भूल जाते हैं)।
  • \n
\n\n

तरीका 2: चालाक reset() और end() (संक्षिप्तता पसंद करने वालों के लिए)

\n\n

PHP में reset() फंक्शन ऐरे का पहला एलिमेंट लौटाता है, और end() आखिरी एलिमेंट। चाल यह है कि हम लूप के अंदर करंट एलिमेंट की इन वैल्यूज से तुलना कर सकते हैं।

\n\n
<?php\n$items = ['सेब', 'केला', 'चेरी', 'तरबूज'];\n$first = reset($items);\n$last = end($items);\n\nforeach ($items as $item) {\n    if ($item === $first) {\n        echo "<strong>पहला: $item</strong><br>";\n    } elseif ($item === $last) {\n        echo "<em>आखिरी: $item</em><br>";\n    } else {\n        echo "$item<br>";\n    }\n}\n?>
\n\n

फायदे:

\n
    \n
  • कोड बहुत कॉम्पैक्ट और "सुंदर" दिखता है।
  • \n
  • काउंटर और count() की जरूरत नहीं।
  • \n
\n\n

नुकसान:

\n
    \n
  • सबसे बड़ा खतरा: अगर ऐरे में डुप्लिकेट वैल्यू हैं, तो यह तरीका फेल हो जाएगा। मान लीजिए पहला और तीसरा एलिमेंट एक जैसे हैं। कोड सोचेगा कि तीसरा एलिमेंट भी पहला है।
  • \n
  • reset()

ब्लॉग

पुस्तक अनुशंसाएँ