PHP ऐरे में किसी भी स्थान पर तत्व सम्मिलित करना: हुड के नीचे का जादू

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

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

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

PHP ऐरे में किसी भी स्थान पर तत्व सम्मिलित करना: यह हुड के नीचे कैसे काम करता है

\n\n

क्या आपने कभी ऐसी स्थिति का सामना किया है जहाँ आपको किसी नए तत्व को अंत में नहीं, बल्कि ऐरे के ठीक बीच में सम्मिलित करने की आवश्यकता हो? उदाहरण के लिए, वर्णमाला क्रम में सूची के बीच में एक उपयोगकर्ता जोड़ना या ब्लॉग में दूसरी और तीसरी पोस्ट के बीच एक विज्ञापन बैनर सम्मिलित करना। PHP में यह उन कार्यों में से एक है जो सरल लगता है, लेकिन करीब से देखने पर भाषा की आंतरिक यांत्रिकी की एक पूरी दुनिया खुल जाती है।

\n\n

प्रश्न «Insert new item in array on any position in PHP» Stack Overflow पर एक वास्तविक हिट है। हजारों डेवलपर्स उत्तर खोजते हैं, और यह व्यर्थ नहीं है। इस लेख में, हम न केवल एक तैयार समाधान दिखाएंगे, बल्कि हुड के नीचे भी झाँकेंगे: मेमोरी में क्या होता है, क्यों array_splice राजा है, और कब अन्य दृष्टिकोणों का उपयोग करना बेहतर है। चलिए शुरू करते हैं!

\n\n

समस्या का विवरण: «किसी भी स्थान पर सम्मिलित करने» का क्या अर्थ है?

\n\n

कल्पना करें कि हमारे पास नामों की एक सरणी है:

\n\n
$users = ['Alice', 'Bob', 'Charlie', 'David'];
\n\n

हम Bob के बाद नाम «Eve» सम्मिलित करना चाहते हैं, ताकि प्राप्त हो:

\n\n
['Alice', 'Bob', 'Eve', 'Charlie', 'David']
\n\n

यह कितना आसान हो सकता है? लेकिन मानक फ़ंक्शन array_push और $array[] = केवल अंत में तत्व जोड़ सकते हैं। और array_unshift केवल शुरुआत में। बीच के लिए कुछ और चाहिए।

\n\n

समाधान #1: array_splice — ऐरे का स्विस आर्मी चाकू

\n\n

PHP ऐरे में किसी भी स्थान पर तत्व सम्मिलित करने का मुख्य उपकरण फ़ंक्शन array_splice है। आइए देखें कि यह व्यवहार में कैसे काम करता है।

\n\n
<?php\n$fruits = ['apple', 'banana', 'cherry', 'date'];\narray_splice($fruits, 2, 0, 'blueberry');\nprint_r($fruits);\n?>
\n\n

परिणाम:

\n\n
Array\n(\n    [0] => apple\n    [1] => banana\n    [2] => blueberry\n    [3] => cherry\n    [4] => date\n)
\n\n

array_splice के पैरामीटर को समझते हैं:

\n
    \n
  • $array — मूल ऐरे (संदर्भ द्वारा पारित किया जाता है, अर्थात यह स्थान पर बदल जाता है)।
  • \n
  • offset — वह स्थान जहाँ हम सम्मिलित करते हैं (हमारे उदाहरण में 2 वह इंडेक्स है जहाँ नया तत्व जाएगा, और पुराने दाईं ओर शिफ्ट हो जाएंगे)।
  • \n
  • length — हटाए जाने वाले तत्वों की संख्या। यदि 0 रखा जाए, तो हम कुछ भी नहीं हटाते — केवल सम्मिलित करते हैं।
  • \n
  • replacement — स्वयं नया तत्व (या तत्वों का ऐरे)।
  • \n
\n\n

यह एक सुरुचिपूर्ण समाधान है जो 99% मामलों को कवर करता है। लेकिन «हुड के नीचे» क्या होता है?

\n\n

array_splice अंदरूनी रूप से कैसे काम करता है: शिफ्ट की यांत्रिकी

\n\n

जब आप array_splice($array, 2, 0, $value) कॉल करते हैं, PHP कई चरण निष्पादित करता है:

\n\n
    \n
  1. ऑफ़सेट की गणना: यदि offset ऋणात्मक है, तो इसे ऐरे के अंत से गिना जाता है।
  2. \n
  3. तत्वों का शिफ्ट: offset स्थिति से शुरू होने वाले सभी तत्व, सम्मिलित किए जाने वाले तत्वों की संख्या से दाईं ओर शिफ्ट हो जाते हैं। यह एक O(n) ऑपरेशन है — ऐरे जितना बड़ा होगा, उतना ही अधिक समय लगेगा।
  4. \n
  5. सम्मिलन: नया तत्व खाली हुई जगह पर रखा जाता है।
  6. \n
  7. पुनः-अनुक्रमण: यदि ऐरे संख्याओं द्वारा अनुक्रमित था, PHP कुंजियों की पुनर्गणना करता है ताकि वे क्रम में हों।
  8. \n
\n\n

यह समझना महत्वपूर्ण है: PHP में ऐरे सरल सूचियाँ नहीं हैं, बल्कि हैश टेबल (ordered hash maps) हैं। इसलिए बीच में सम्मिलित करने के लिए मेमोरी में तत्वों के भौतिक स्थानांतरण की आवश्यकता होती है, जो प्रदर्शन को प्रभावित करता है। छोटे ऐरे (सौ तत्वों तक) के लिए यह ध्यान देने योग्य नहीं है, लेकिन लाखों रिकॉर्ड वाले ऐरे के लिए यह एक बाधा बन सकता है।

\n\n

समाधान #2: कई तत्वों के साथ array_splice

\n\n

क्या होगा यदि आपको एक साथ कई तत्व सम्मिलित करने की आवश्यकता हो? array_splice इससे भी निपटता है:

\n\n
<?php\n$numbers = [1, 2, 5, 6];\narray_splice($numbers, 2, 0, [3, 4]);\nprint_r($numb                

ब्लॉग

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