PHP सरणी: गिनती या आकार?


216

PHP में तत्वों की संख्या $arrayज्ञात करने के लिए, जो तेज / बेहतर / मजबूत है?

count($array)या sizeof($array)?

संपादित करें

एंडी लेस्टर के लिए धन्यवाद, मैंने बहुभाषी दृष्टिकोण से मेरे प्रश्न को परिष्कृत किया है। मैनुअल टिप्पणीकारों का कहना है

"एक आकार का] C के आधार पर कई अन्य भाषाओं में समान नहीं है"

क्या ये सच है?


72
एक बेड़ा पंक संदर्भ ... :)
बेन

2
बहुत अच्छा सवाल है। लेकिन यहाँ एक अच्छा बेंचमार्क साइट है, जो कहती है कि साइज़ोफ़ बस 21 sins तेज़ है
sinaneker

जवाबों:


191

मैं उपयोग करूंगा count()यदि वे समान हैं, जैसा कि मेरे अनुभव में यह अधिक सामान्य है, और इसलिए कम डेवलपर्स को आपके कोड को पढ़ने का कारण होगा " sizeof(), यह क्या है?" और प्रलेखन से परामर्श करना।

मुझे लगता है कि इसका मतलब sizeof()सी की तरह काम नहीं करता है (डेटाटाइप के आकार की गणना)। यह शायद इस उल्लेख स्पष्ट रूप से क्योंकि पीएचपी सी में लिखा है बनाया है, और सी कार्य (के लिए समान नाम रैपर का एक बहुत प्रदान करता है strlen(), printf(), आदि)


92

Phpbench के अनुसार :

क्या यह पहले से लूप की लंबाई की गणना करने के प्रयास के लायक है?

//pre-calculate the size of array
$size = count($x); //or $size = sizeOf($x);

for ($i=0; $i<$size; $i++) {
    //...
}

//don't pre-calculate
for ($i=0; $i<count($x); $i++) { //or $i<sizeOf($x);
    //...
}

1 बाइट मान के साथ 1000 कुंजी के साथ एक लूप दिया जाता है।

                  +---------+----------+
                  | count() | sizeof() |
+-----------------+---------+----------+
| With precalc    |     152 |      212 |
| Without precalc |   70401 |    50644 |
+-----------------+---------+----------+  (time in µs)

इसलिए मैं व्यक्तिगत रूप से प्री कैल्क के साथ आकार () के बजाय गिनती () का उपयोग करना पसंद करता हूं ।


3
कृपया केवल वही बताएं जिसमें कम समय लगता है। जवाब काफी जटिल है और भ्रामक भी! धन्यवाद
प्रतीक

6
php के किस संस्करण के साथ आप परीक्षण कर रहे थे? नए संस्करणों में बहुत सारे अनुकूलन हैं जो इन परिणामों को काफी भिन्न बना सकते हैं
जॉन हंट

4
क्यों यह एक चर में परिणाम है, लेकिन अन्यथा यह चारों ओर का दूसरा रास्ता है बचत के बिना तेजी से आकार है? यह php दुभाषिया में कुछ बुरा डिजाइन विकल्प है जो कुछ प्रकार के चयनात्मक उपरि का कारण बनता है? मैं जानना चाहता हूं कि आपने यह कैसे निर्धारित किया, माइक्रोसेकंड माप मुझे चिंतित करता है। शायद यह लूप के लिए एक बाहरी समय में भारी मात्रा में चलाने की कोशिश करता है?
फ्लोरेसेंटग्रीन 5

1
"प्री कैल्क" से आपका क्या अभिप्राय है?
रूबों 77 rub

1
@ rubo77 उपरोक्त कोड देखें; "प्री-कैल्क" फॉर-लूप से पहले, एक बार सरणी का आकार निर्धारित कर रहा है। "प्री-कैल्क" के बिना लूप के अंदर के सरणी का आकार निर्धारित कर रहा है
रॉबथ

38

वे के अनुसार समान हैं sizeof()

"तेज" के बारे में चिंता करने के लिए किसी भी कारण की अनुपस्थिति में, हमेशा मानव के लिए अनुकूलन करें। जो मानव पाठक के लिए अधिक मायने रखता है?


19

वेबसाइट के अनुसार, sizeof()का उपनाम है count(), इसलिए उन्हें एक ही कोड चलाना चाहिए। शायद sizeof()थोड़ा उपरि है क्योंकि इसे इसे हल करने की आवश्यकता है count()? हालांकि यह बहुत कम होना चाहिए।


53
खैर, अनुमान लगाने के लिए क्षमा करें? मैं सिर्फ यह कह रहा था कि वे वास्तव में एक ही चीज हैं। फिर, मैंने एक तार्किक निष्कर्ष निकाला कि वास्तविक फ़ंक्शन के बजाय एक फ़ंक्शन के लिए एक उपनाम का उपयोग करना बहुत कम धीमा हो सकता है, लेकिन यह स्वीकार किया कि मुझे "शायद" शब्द के साथ इसे रखने से कोई विचार नहीं है। क्षमा करें यदि वह आपको नाराज करता है। हो सकता है कि अगली बार मैं "infinitesimal" शब्द का उपयोग करूं।
एंडी ग्रॉफ

8

मुझे पता है कि यह पुराना है, लेकिन मैं यह उल्लेख करना चाहता हूं कि मैंने PHP 7.2 के साथ यह कोशिश की थी :

<?php
//Creating array with 1 000 000 elements
$a = array();
for ($i = 0; $i < 1000000; ++$i)
{
    $a[] = 100;
}

//Measure
$time = time();
for ($i = 0; $i < 1000000000; ++$i)
{
    $b = count($a);
}
print("1 000 000 000 iteration of count() took ".(time()-$time)." sec\n");

$time = time();
for ($i = 0; $i < 1000000000; ++$i)
{
    $b = sizeof($a);
}
print("1 000 000 000 iteration of sizeof() took ".(time()-$time)." sec\n");
?>

और परिणाम था:

1 000 000 000 iteration of count() took 414 sec
1 000 000 000 iteration of sizeof() took 1369 sec

तो बस उपयोग करें count()


यह दिलचस्प है। आप किस PHP संस्करण का उपयोग करते हैं?
वाजा

@ वाजा मैं PHP 7.2
मेहदी बोनाया

1
PHP 7.3.3 के साथ: 1 000 000 000 iteration of count() took 525 sec 1 000 000 000 iteration of sizeof() took 1361 sec
एंथनीबी

6

sizeof()count() यहाँ वर्णित के रूप में सिर्फ एक अन्य नाम है

http://php.net/manual/en/function.sizeof.php


4
+ एलेक्स हाँ यह करता है। मुझे दो लिंक दिखाई देते हैं। क्या आपने उनसे आकार के फिर से लिखने की अपेक्षा की थी? LOL: p
गोगोल

-2

कृपया गणना फ़ंक्शन का उपयोग करें, यहां एक उदाहरण दिया गया है कि किसी तत्व में सरणी की गणना कैसे करें

$cars = array("Volvo","BMW","Toyota");
echo count($cars);

count()समारोह एक सरणी में तत्वों की संख्या देता है।

sizeof()समारोह एक सरणी में तत्वों की संख्या देता है।

sizeof()समारोह के उपनाम है count()समारोह।

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