Array_push () और $ array [] = के बीच अंतर


117

PHP मैनुअल में, ( array_push ) कहते हैं ..

यदि आप सरणी में एक तत्व जोड़ने के लिए array_push () का उपयोग करते हैं, तो $ array [] = का उपयोग करना बेहतर होता है क्योंकि उस तरह से फ़ंक्शन को कॉल करने का कोई ओवरहेड नहीं होता है।

उदाहरण के लिए :

$arr = array();
array_push($arr, "stackoverflow");
print_r($arr);

बनाम

$arr[] = "stackoverflow";
print_r($arr);

मुझे समझ नहीं आता कि बड़ा अंतर क्यों है।


8
एक एक फ़ंक्शन कॉल है, दूसरा वह नहीं है। वास्तव में बॉक्स में क्या उल्लेख किया गया है।
किंगक्रंच

1
एक फ़ंक्शन कॉल है जैसा कि ऊपर उल्लेख किया गया है, जिसका अर्थ फ़ंक्शन कॉल से / से नियंत्रण स्विच करने के लिए कुछ संसाधनों का उपयोग है (इस प्रकार ओवरहेड प्रसंस्करण के परिणामस्वरूप)। जबकि, बाद में सीधे नए तत्व को सीधे सरणी में असाइन किया जा रहा है।
ग़ज़नफ़र मीर

2
इस सवाल ने मुझे समय की एक
किरणों की ओर

जवाबों:


151

जब आप PHP (जैसे जैसे array_push()) में किसी फ़ंक्शन को कॉल करते हैं, तो कॉल पर ओवरहेड्स होते हैं, क्योंकि PHP को फ़ंक्शन संदर्भ को देखना होगा, मेमोरी में अपनी स्थिति का पता लगाना चाहिए और जो भी कोड परिभाषित करता है उसे निष्पादित करें।

उपयोग करने के $arr[] = 'some value';लिए एक फ़ंक्शन कॉल की आवश्यकता नहीं होती है, और डेटा संरचना में सीधे जोड़ को लागू करता है। इस प्रकार, बहुत अधिक डेटा जोड़ने पर यह उपयोग करने के लिए बहुत तेज और संसाधन-कुशल है $arr[]


3
क्या होगा अगर इस तरह के संकेतन "$ गिरफ्तार [] = 'कुछ मूल्य';" फ़ंक्शन के कॉल के लिए नीचे फोड़े?
तेबे

1
@gekannt ऐसा कैसे होगा? क्या आपका मतलब है कि अगर आपकी टिप्पणी में 'कुछ मूल्य' बंद है? यह सरणी में क्लोजर के संदर्भ को संग्रहीत करेगा। यदि आपका मतलब है कि 'कुछ मूल्य' एक ऐसा कार्य है जो कि लागू हो जाता है, तो यह उस फ़ंक्शन को जो भी लौटाता है, जोड़ देगा।
किर्कलैंड

@ किर्कलैंड ऑपरेटर ज्यादातर सी-लाइक भाषाओं में एक वैकल्पिक वाक्यविन्यास के साथ कार्य करते हैं, मैं कोई PHP विशेषज्ञ नहीं हूं, लेकिन मैं कल्पना कर सकता हूं कि उन्होंने ऑपरेटरों को उसी तरह से लागू किया है क्योंकि यह सी बोली है।
केविन

1
@ केविन: मैं आपसे सहमत हूं और मुझे पूरा यकीन है कि वैकल्पिक वाक्यविन्यास के पीछे एक कार्य है, जिसका उल्लेख ऊपर नहीं किया गया है क्योंकि मैं php प्रलेखन में गिरती हुई टिप्पणी देखता हूं: "यदि आप एक तत्व जोड़ने के लिए array_push () का उपयोग करते हैं सरणी के लिए $ सरणी का उपयोग करना बेहतर है [] = क्योंकि उस तरह से फ़ंक्शन को कॉल करने का कोई ओवरहेड नहीं है। " अब देखने का समय नहीं है कि इसके पीछे क्या है क्योंकि खोज शब्द खोज इंजन के लिए थोड़ा भ्रमित है :)
jnhghy - अलेक्जेंड्रू जंटिया

क्या कोई वास्तविक सबूत है $arr[] = valueजो तेज है? यह कल्पना करने की कोशिश करना कि संकलक कोड को किसी भी तरह से क्यों व्यवहार करेगा।
c ..

44

आप array_push का उपयोग करके एक शॉट में 1 से अधिक तत्व जोड़ सकते हैं,

जैसे array_push($array_name, $element1, $element2,...)

जहां $ एलिमेंट 1, $ एलिमेंट 2, ... एरे को जोड़े जाने वाले तत्व हैं।

लेकिन अगर आप एक समय में केवल एक तत्व जोड़ना चाहते हैं, तो अन्य विधि (यानी $ array_name [] का उपयोग करके) को प्राथमिकता दी जानी चाहिए।


क्या पूरे प्रोजेक्ट में आवश्यकतानुसार दोनों को जोड़ना बुरा है?
PBwebD

1
@ test123 बिल्कुल नहीं। यह हाथ में उपलब्ध सबसे कुशल समाधान का उपयोग करने के लिए एक अच्छा अभ्यास है, जब तक कि यह पठनीयता, अनुकूलता आदि को गंभीर रूप से कम नहीं करता है, (या यदि आपको कुछ स्टाइल गाइडों का पालन करने की आवश्यकता है)।
क्रिस क्रॉस्ज़ेवस्की

15

अंतर नीचे की रेखा में है "क्योंकि उस तरह से फ़ंक्शन को कॉल करने का कोई ओवरहेड नहीं है।"

array_push()यदि पहला तर्क कोई सरणी नहीं है, तो एक चेतावनी बढ़ाएगा। यह उस $var[]व्यवहार से भिन्न होता है जहां एक नया सरणी बनाया जाता है।


4
मैंने यह नहीं कहा कि यह एक कारण था। प्रश्न में, अंतर पूछा गया था और यह अंतर भी है
बेग

7

आपको हमेशा $array[]संभव हो तो उपयोग करना चाहिए क्योंकि बॉक्स में कहा गया है कि फ़ंक्शन कॉल के लिए कोई ओवरहेड नहीं है। इस प्रकार यह फंक्शन कॉल की तुलना में थोड़ा तेज है।


4

array_push - सरणी के अंत में एक या अधिक तत्व पुश करें

शब्दों का ध्यान रखें " एक या एक से अधिक तत्व अंत में " ऐसा करने के लिए कि $arr[]आपको सरणी का अधिकतम आकार प्राप्त करना होगा


पुनः "$ गिरफ्तारी का उपयोग करते हुए [] आपको सरणी का अधिकतम आकार प्राप्त करना होगा" । नहीं, आप भ्रमित कर रहे हैं $arr[...index...] = $value;कि यहाँ क्या चर्चा हो रही है, जो है $arr[] = $value;। अंत पर पुश करने के लिए आकार या सरणी को जानने की आवश्यकता नहीं है। कई तत्व बस कई कॉल होंगे: $arr[] = $value1; $arr[] = $value2; $arr[] = $value3;
ToolmakerSteve

2

समझाएँ: 1. पहले एक सरणी में चर घोषित करते हैं।

2. सरणी में चर को पुश करने के लिए दूसरी array_push विधि का उपयोग किया जाता है।

3. आमतौर पर यह परिणाम प्रिंट करेगा।

4. दूसरी विधि सीधे स्ट्रिंग में स्टोर है।

5. डेटा Print_r विधि का उपयोग करके सरणी मानों में मुद्रित किया जाता है।

यह दो समान हैं


1

दोनों समान हैं, लेकिन array_push इसमें एक लूप बनाता है जो पैरामीटर है जो एक सरणी है और $ array [] = $ तत्व करता है


0

मुझे पता है कि यह एक पुराना उत्तर है, लेकिन दूसरों के लिए यह जानना उपयोगी हो सकता है कि दोनों के बीच एक और अंतर यह है कि अगर आपको एक लूप में 2/3 से अधिक मान जोड़ना है, तो इसका उपयोग करना तेज़ है:

     for($i = 0; $i < 10; $i++){
          array_push($arr, $i, $i*2, $i*3, $i*4, ...)
     }

के बजाय:

     for($i = 0; $i < 10; $i++){
         $arr[] = $i;
         $arr[] = $i*2;
         $arr[] = $i*3;
         $arr[] = $i*4;
         ...
     }

संपादित करें- forसशर्त के लिए ब्रैकेट को बंद करना भूल गए


1
मुझे आश्चर्य है कि यह array_merge से तुलना कैसे करता है। जैसे for(...){ $arr = $arr + [$i, $i*2, $i*3, $i*4, ...] }। मुझे लगता है कि array_push अभी भी इससे थोड़ा तेज है।
टूलमेकरसैट

0

किसी ने भी नहीं कहा, लेकिन array_push केवल ARRAY के END में एक तत्व को धक्का देता है, जहां $ array [index] किसी भी दिए गए इंडेक्स में वैल्यू डाल सकता है। बड़ा अंतर।


सवाल यह था कि "array_push () और $ array [] =" के बीच का अंतर जो मैंने कहा है वह एक अंतर है। एक बडासा!
मार्को

1
मैं आदरपूर्वक असहमत हूं। आप वर्णन कर रहे हैं $array[index] = , जो की तुलना में एक अलग ऑपरेशन है $array[] = ...। प्रश्न कोड के दो टुकड़े देता है, और पूछता है कि उनके बीच एक महत्वपूर्ण [प्रदर्शन] अंतर क्यों होगा । प्रश्न का शाब्दिक अर्थ है $array[] = ..., जो एक विशिष्ट php मुहावरा है, जिसमें कोई सूचकांक शामिल नहीं है। सरणी + इंडेक्स एक अलग समस्या को हल करता है, अलग कोड देता है, और एक अलग ट्रेडऑफ़ है।
टूलमेकरसेव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.