PHP, $ array [] = $ value या array_push ($ array, $ value) में क्या उपयोग करना बेहतर है?


113

एक सरणी सदस्य को नियुक्त करने के लिए PHP में क्या उपयोग करना बेहतर है,

$array[] = $value;

या

array_push($array, $value);

?

हालाँकि मैनुअल कहता है कि आप फंक्शन कॉल से बचने के लिए बेहतर हैं, मैंने यह भी पढ़ा $array[]है कि यह बहुत धीमा है array_push()। कुछ स्पष्टीकरण या बेंचमार्क क्या हैं?


2
$ myArray [] = 123; यह array_push फ़ंक्शन से अधिक तेज़ होगा। यह सीधे उस सरणी में मान जोड़ता है। फ़ंक्शन में उस चर के लिए अलग स्टैक है। और उस फ़ंक्शन के अंदर यह कथन हो सकता है,।
लग्नेश

जवाबों:


151

कोई मानदंड नहीं है, लेकिन मुझे व्यक्तिगत रूप से ऐसा लगता $array[]है कि देखने के लिए क्लीनर है, और ईमानदारी से मिलीसेकंड पर बालों को विभाजित करना बहुत ही अप्रासंगिक है जब तक कि आप अपने सरणी के सैकड़ों हजारों स्ट्रिंग्स को जोड़ने की योजना नहीं बनाते हैं।

संपादित करें : इस कोड को चलाएं:

$t = microtime(true);
$array = array();
for($i = 0; $i < 10000; $i++) {
    $array[] = $i;
}
print microtime(true) - $t;
print '<br>';
$t = microtime(true);
$array = array();
for($i = 0; $i < 10000; $i++) {
    array_push($array, $i);
}
print microtime(true) - $t;

पहली विधि का उपयोग $array[]करना दूसरे की तुलना में लगभग 50% तेज है।

कुछ बेंचमार्क परिणाम:

Run 1
0.0054171085357666 // array_push
0.0028800964355469 // array[]

Run 2
0.0054559707641602 // array_push
0.002892017364502 // array[]

Run 3
0.0055501461029053 // array_push
0.0028610229492188 // array[]

यह आश्चर्य की बात नहीं होनी चाहिए, क्योंकि PHP मैनुअल यह नोट करता है:

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

जिस तरह से इसे अभिव्यक्त किया गया है, मुझे आश्चर्य नहीं होगा यदि array_pushकई मूल्यों को जोड़ने पर अधिक कुशल हो। EDIT : जिज्ञासा से बाहर, कुछ और परीक्षण किए, और यहां तक ​​कि बड़ी मात्रा में परिवर्धन के लिए, व्यक्तिगत $array[]कॉल एक से अधिक बड़ी हैं array_push। दिलचस्प।


मैं हमेशा यह जानना चाहता हूं कि कौन सा तरीका सबसे तेज़ है, इसलिए जब दिन आएगा तो मुझे एक उच्च ट्रैफ़िक साइट का निर्माण करने के लिए कहा जाएगा, मुझे कुछ जानकारी होगी। जवाब के लिए धन्यवाद।
एलेक्स

10
इस तरह के सूक्ष्म-अनुकूलन शायद ही कभी प्रयास के लायक हैं। यदि आप इसे स्क्रैच से लिख रहे हैं, तो इसे कैसे करें, यह सबसे अधिक समझ में आता है, और केवल तब, यदि यह एक पृष्ठ बनाने के लिए थोड़ा धीमा है, इसे प्रोफाइल करें। चीजों को गति देने के लिए इस तरह से कुछ बदलने के लिए सभी तरह से नीचे होने की संभावना मामूली है।
एलिस्टर बुलमैन

4
बस यह सुनिश्चित करने के लिए, चूंकि कोड आउटपुट को मिसमैच करने के लिए लगता है, मैंने सत्यापित किया कि $array[]वास्तव में बहुत तेज है, मेरी मशीन पर 1M असाइनमेंट के लिए 300ms बनाम 2000ms। हालाँकि, array_push में एक बार में 20 आइटम जोड़ना लगभग 20 $array[] =s जितना तेज़ था ।
एले

5
@AlisterBulman माइक्रो-ऑप्टिमाइज़ेशन प्रयास के लायक नहीं हैं यदि आप अपने पूरे कोडबेस के माध्यम से वापस जाने के बारे में सोच रहे हैं और इसे 'अनुकूलित' कर रहे हैं। हालांकि, अगर आपके पास एक ही काम करने के कई अलग-अलग तरीके हैं और जानते हैं कि एक तरीका दूसरों की तुलना में बेहतर (यहां तक ​​कि बस थोड़ा सा) है, तो आप उस तरीके का उपयोग करना अपनी आदत बना सकते हैं। आप ऐसा क्यों नहीं करेंगे?
ओकोनोमियाकी 3000

2
@AlisterBulman मुझे दृढ़ता से असहमत होना चाहिए, या कम से कम आंशिक रूप से, यदि आप बेहतर जानते हैं , तो बेहतर लिखें , लेकिन संभव सूक्ष्म अनुकूलन की खोज में बहुत प्रयास न करें ...
jave.web

42

Array_push () का मुख्य उपयोग यह है कि आप सरणी के अंत में कई मानों को धकेल सकते हैं।

यह प्रलेखन में कहते हैं :

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


29

इसके लिए php डॉक्स सेarray_push :

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


मजेदार है कि आपका उत्तर पहले कैसे था, लेकिन क्या कम मतदान हुआ है।
T.Woody

21

सड़क पर शब्द है कि [] तेज है क्योंकि फ़ंक्शन कॉल के लिए कोई ओवरहेड नहीं है। इसके अलावा, कोई भी वास्तव में PHP के सरणी कार्यों को पसंद नहीं करता है ...

"क्या यह ... हिस्टैक, सुई .... या यह सुई हैस्टैक है ... आह, च *** यह ... [] ="


7
है ना? PHP के अरेंज फंक्शन कमाल के हैं।
cletus

13
कार्यात्मक रूप से वे भयानक हैं, हाँ, लेकिन वह असंगत नामकरण योजना का उल्लेख कर रहे थे।
ryeguy

2
आपको अपने आईडीई में पैरामीटर हिंटिंग चालू करना चाहिए। लेकिन मैं मानता हूं, कुछ स्थिरता बहुत अच्छी होती।
पिम जगेर

4
मैं इस पर सहमत हूं। नामकरण योजना (x_y या xy या y_x ...) में न तो कोई संगति है और न ही पैरामीटर लॉजिक में (टारगेट ऑब्जेक्ट को पहले पास करें, अंतिम, सरणियों, स्ट्रिंग्स और रेगेक्स के बीच, एक सामान्य नियम खोजने के लिए शुभकामनाएँ!)।
e2-e4

3
एफडब्ल्यूआईडब्ल्यू, मुझे सुई / हैस्टैक नामकरण सम्मेलन पसंद है और इसे याद रखना आसान है, क्योंकि यह वाक्यांश के समान क्रम में जाता है: "एक घास में (2) में सुई (1)
ढूंढना

8

एक अंतर यह है कि आप array_push () को दो से अधिक मापदंडों के साथ कॉल कर सकते हैं, अर्थात आप एक समय में एक से अधिक तत्वों को एक सरणी में धकेल सकते हैं।

$myArray = array();
array_push($myArray, 1,2,3,4);
echo join(',', $myArray);

प्रिंट 1,2,3,4


2

एक साधारण $ myarray [] घोषणा शीघ्र हो जाएगी क्योंकि आप केवल एक आइटम को ओवरहेड की कमी के कारण आइटम के ढेर पर धकेल रहे हैं जो एक फ़ंक्शन लाएगा।


2

चूंकि " array_push " एक फ़ंक्शन है और इसे कई बार कहा जाता है जब यह लूप के अंदर होता है इसलिए यह स्टैक में मेमोरी आवंटित करेगा। लेकिन जब हम $ array [] = $ value का उपयोग कर रहे हैं तब हम सिर्फ array को value असाइन कर रहे हैं।


1

दूसरा एक फंक्शन कॉल है इसलिए आमतौर पर इसे कोर एरे-एक्सेस फीचर्स का उपयोग करने की तुलना में धीमा होना चाहिए। लेकिन मुझे लगता है कि आपकी स्क्रिप्ट के भीतर भी एक डेटाबेस क्वेरी 1.000.000 कॉल्स को कम कर देगी array_push()


0

हालाँकि यह सवाल प्रदर्शन के बारे में अधिक था, लोग इस प्रश्न पर विचार करेंगे कि क्या इसका उपयोग करना अच्छा है array_pushया नहीं $arr[]

फ़ंक्शन का अर्थ कई मानों के लिए कम लाइनें हो सकता है:

// 1 line:
array_push($arr, "Bob", "Steve");
// versus 2 lines:
$arr[] = "Bob";
$arr[] = "Steve";

हालाँकि , array_push...

  • सरणी कुंजियाँ प्राप्त नहीं की जा सकतीं
  • टूट जाता है सुई / हैस्टैक नामकरण सम्मेलन
  • धीमी है, जैसा कि चर्चा की गई है

मैं साथ रहूँगा $arr[]


0

मैं बस जोड़ना नहीं चाहता: int array_push(...)सरणी ( php doc ) में तत्वों की नई संख्या लौटाता हूं । जो उपयोगी और से अधिक कॉम्पैक्ट हो सकता है $myArray[] = ...; $total = count($myArray);

यह array_push(...)भी सार्थक है जब चर का उपयोग स्टैक के रूप में किया जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.