PHP में एरे में एलिमेंट जोड़ना: अंदरूनी कामकाज को समझें
\n\nकल्पना करें: आप एक ऑनलाइन स्टोर के लिए PHP स्क्रिप्ट लिख रहे हैं। एक नया प्रोडक्ट आया है, और उसे 'स्मार्टफोन' और 'लैपटॉप' के बीच में रखना है। या फिर आप डेटा पार्स कर रहे हैं और CSV के बीच में एक लाइन जोड़नी है। यह स्थिति जानी-पहचानी लगती है? "PHP में किसी भी पोजीशन पर एरे में नया आइटम डालना" सवाल ने Stack Overflow पर हज़ारों व्यूज़ बटोरे हैं। और कोई आश्चर्य नहीं: PHP में 'इंडेक्स पर एलिमेंट डालो' जैसा कोई बिल्ट-इन फंक्शन नहीं है। लेकिन इसके लिए शक्तिशाली टूल्स मौजूद हैं जो इसे आसानी से और कुशलता से करते हैं। आइए जानें कि यह अंदरूनी तौर पर कैसे काम करता है।
\n\nPHP में सीधा insert() फंक्शन क्यों नहीं है?
\n\nJavaScript (जहाँ splice() है) या Python (list.insert()) के विपरीत, PHP के एरे हाइब्रिड हैं: वे एक साथ लिस्ट और हैश-टेबल दोनों होते हैं। जब आप बीच में कोई एलिमेंट डालते हैं, तो PHP को सिर्फ पॉइंटर्स शिफ्ट नहीं करने होते, बल्कि आंतरिक डेटा संरचना को फिर से बनाना होता है। यही कारण है कि डेवलपर्स ने कोई सीधा मेथड नहीं जोड़ा, बल्कि एक यूनिवर्सल टूल दिया — array_splice()। यह 99% समस्याओं को हल करता है, लेकिन इसकी 'अंदरूनी' लॉजिक को समझना ज़रूरी है।
सबसे सही तरीका: array_splice()
\n\nयह हमारे लेख का मुख्य नायक है। array_splice() फंक्शन न केवल एरे के हिस्से को हटाता है, बल्कि उसकी जगह नए एलिमेंट भी डाल सकता है। और यह बिना नया एरे बनाए करता है — बदलाव 'in place' (रेफरेंस के ज़रिए) होते हैं।
<?php\n$fruits = ['सेब', 'केला', 'चेरी', 'खजूर'];\n// पोजीशन 2 पर 'अंगूर' डालें ('केला' के बाद)\narray_splice($fruits, 2, 0, 'अंगूर');\nprint_r($fruits);\n// परिणाम: ['सेब', 'केला', 'अंगूर', 'चेरी', 'खजूर']\n?>\n\nसिंटैक्स: array_splice(&$array, $offset, $length, $replacement)। तीसरा पैरामीटर ($length) शून्य है — इसका मतलब है कि हम कुछ नहीं हटा रहे, बस डाल रहे हैं। चौथा पैरामीटर एक एलिमेंट या एरे हो सकता है।
अंदरूनी कामकाज: जब आप शून्य लंबाई के साथ array_splice() कॉल करते हैं, तो PHP यह करता है:
- \n
$offsetपोजीशन पर आंतरिक पॉइंटर ढूँढता है। \n - एरे को फैलाता है: पोजीशन से लेकर अंत तक के सभी एलिमेंट दाईं ओर शिफ्ट होते हैं। \n
- खाली जगह में नया एलिमेंट (या एलिमेंट्स) डालता है। \n
- न्यूमेरिक कीज़ को फिर से इंडेक्स करता है (यदि वे मौजूद थीं)। \n
महत्वपूर्ण: यह ऑपरेशन O(n) समय में होता है — एरे जितना बड़ा होगा और इंसर्ट जितना शुरुआत के करीब होगा, उतने ही अधिक एलिमेंट शिफ्ट करने होंगे। 99% वेब एप्लिकेशन के लिए यह अदृश्य है, लेकिन अगर आप लाखों रिकॉर्ड वाले एरे के साथ काम कर रहे हैं, तो विकल्पों पर विचार करें।
\n\nएक साथ कई एलिमेंट डालना
\n\nएक साथ तीन एलिमेंट डालना चाहते हैं? बस एक एरे पास करें:
\n\n<?php\n$colors = ['लाल', 'हरा', 'नीला'];\narray_splice($colors, 1, 0, ['पीला', 'बैंगनी', 'नारंगी']);\nprint_r($colors);\n// ['लाल', 'पीला', 'बैंगनी', 'नारंगी', 'हरा', 'नीला']\n?>\n\nध्यान दें: डाला गया एरे नेस्टेड नहीं होता — इसके एलिमेंट 'अनपैक' होकर क्रम से जुड़ जाते हैं।
\n\nमैन्युअल इंसर्ट: जब array_splice काम न करे
\n\nकभी-कभी मूल एरे को बिना बदले रखना होता है। या आप बिना मूल डेटा को प्रभावित किए एलिमेंट डालना चाहते हैं। तब array_slice() और सरल कॉपी काम आते हैं।
<?php\nfunction insertIntoArray(array $original, int $position, mixed $element): array\n{\n $before = array_slice($original, 0, $position);\n $after = array_slice($original, $position);\n return array_merge($before, [$element], $after);\n}\n\n$arr = ['a', 'b', 'c', 'd'];\n$newArr = insertIntoArray($arr, 2, 'X');\nprint_r($newArr); // ['a', 'b', 'X', 'c', 'd']\n// $arr अपरिवर्तित रहता है\n?>\n\nअंदरूनी कामकाज क्या है? array_slice() दो नए एरे बनाता है — यह कॉपी करना है