2011-10-01 20 views
5

दिए गए स्ट्रिंग के अंदर एक चरित्र प्राप्त करने का सबसे तेज़ तरीका मुझे इंडेक्स दिए गए स्ट्रिंग से चरित्र प्राप्त करने के कई तरीकों से पता है।सूचकांक (PHP)

<?php 
$string = 'abcd'; 
echo $string[2]; 
echo $string{2}; 
echo substr($string, 2, 1); 
?> 

अगर आप किसी भी जोड़ने के लिए संकोच नहीं करते कृपया का पता है कि मैं, अगर वहाँ किसी भी अधिक तरीके हैं पता नहीं है। सवाल यह है कि, अगर मैं सूचकांक मूल्य प्राप्त करने के लिए संभवतः mt_rand का उपयोग करके कुछ मिलियन बार ऊपर एक विधि चुनना और दोहराना था, तो कम से कम स्मृति खपत और सबसे तेज़ गति के मामले में कौन सी विधि सबसे प्रभावी होगी?

+1

'$ स्ट्रिंग [2]' या '$ स्ट्रिंग {2} 'गति और स्मृति खपत में समान होना चाहिए और ई उनमें से इशारा substr से तेज होना चाहिए। – anubhava

उत्तर

18

एक उत्तर पर पहुंचने के लिए, आपको एक बेंचमार्क टेस्ट रिग सेट अप करने की आवश्यकता होगी। एक निष्क्रिय बॉक्स पर कई विधियों (सैकड़ों हजारों या लाखों) पुनरावृत्तियों की तुलना करें। प्रारंभ और खत्म के बीच अंतर को मापने के लिए अंतर्निहित माइक्रोटाइम फ़ंक्शन का प्रयास करें। यह तुम्हारा विलुप्त समय है।

परीक्षण आपको लिखने के लिए 2 मिनट का समय लेना चाहिए।

आपको कुछ प्रयास बचाने के लिए, मैंने एक परीक्षा लिखी। मेरा खुद का परीक्षण दिखाता है कि कार्यात्मक समाधान (सबस्ट्र) बहुत धीमी (अपेक्षित) है। बेवकूफ PHP ({}) समाधान इंडेक्स विधि के जितना तेज़ है। वे विस्थापन योग्य हैं। ([]) को प्राथमिकता दी जाती है, क्योंकि यह वह दिशा है जहां PHP स्ट्रिंग ऑफ़सेट के संबंध में जा रहा है।

<?php 
$string = 'abcd'; 
$limit = 1000000; 

$r = array(); // results 

// PHP idiomatic string index method 
$s = microtime(true); 
for ($i = 0; $i < $limit; ++$i) { 
    $c = $string{2}; 
} 
$r[] = microtime(true) - $s; 
echo "\n"; 

// PHP functional solution 
$s = microtime(true); 
for ($i = 0; $i < $limit; ++$i) { 
    $c = substr($string, 2, 1); 
} 
$r[] = microtime(true) - $s; 
echo "\n"; 

// index method 
$s = microtime(true); 
for ($i = 0; $i < $limit; ++$i) { 
    $c = $string[2]; 
} 
$r[] = microtime(true) - $s; 
echo "\n"; 


// RESULTS 
foreach ($r as $i => $v) { 
    echo "RESULT ($i): $v \n"; 
} 
?> 

परिणाम:
परिणाम (PHP4 & 5 मुहावरेदार ब्रेसिज़ वाक्य रचना): .19106006622314
परिणाम (स्ट्रिंग टुकड़ा समारोह): .50699090957642
परिणाम (* सूचकांक वाक्य रचना, के रूप में भविष्य ब्रेसिज़ को हटा दिया जा रहा है *): 0.1 9102001190186

संबंधित मुद्दे