2009-09-09 12 views
26

डेटा का उपयोग करने के लिए किसी का उपयोग किया जाना चाहिए, ऐरे या ऐरे ऑब्जेक्ट? खोज, क्रमबद्ध और अन्य सरणी जोड़ों की तरह।PHP ऐरे और ArrayObject

+0

क्या आपके पास ऐसा उदाहरण है जो आप करना चाहते हैं? – willoller

+0

मुझे एल्गोरिदम में इसका उपयोग करने के लिए मूल रूप से ऐरे का उपयोग करके खोज, क्रमबद्ध और अन्य जटिल हेरफेर की आवश्यकता है। तो मुझे यह जानने की जरूरत है कि कौन सा बेहतर और तेज़ है। – Imrul

उत्तर

27

मूल प्रकार array है। यह कुंजी और मानों का नक्शा है जिसे लूप में पढ़ा और पढ़ा जा सकता है।

ArrayObject एक ऐसा वर्ग है जिसे आप ऑब्जेक्ट बनाने के लिए विस्तारित कर सकते हैं जैसे कि वे सरणी थे। यह count और sort जैसी विधियों को लागू करता है जो आपको किसी ऑब्जेक्ट का इलाज करने में सक्षम बनाता है जैसे कि आप किसी सरणी का इलाज करेंगे। यह एसपीएल (मानक PHP पुस्तकालय) का हिस्सा है।

आमतौर पर आप array का उपयोग करेंगे। आपको पता चलेगा कि आपको ArrayObject की आवश्यकता है।

0

अधिकांश समय एक सरणी की आवश्यकता होती है। जब विशेष उपयोग में कार्यक्षमता के लिए विस्तारित किया जाता है तो ArrayObject सबसे उपयोगी होता है।

1

आप सरल (और मानक) सरणियों

ArrayObject के लिए array का उपयोग एक वर्ग है, जो अपने खुद के वर्ग को बढ़ाने के लिए इस्तेमाल किया जा सकता सरणियों के रूप में प्रयोग की जाने वाली (जैसे कि तुम्हारा के कुछ संग्रह क्लास)

+0

ArrayObject एक सार वर्ग नहीं है। – GZipp

+0

ओह आप सही हैं। मेरा बुरा, संपादित – knittl

2

arrayObject है serialization की आवश्यकता है जब ज्यादातर उपयोगी है।

इसके अलावा आप arrayObject को विस्तारित करके अपना स्वयं का संग्रह वर्ग बना सकते हैं। फिर आप डेटा को स्थानांतरित करने के लिए अपनी कक्षा ऑब्जेक्ट को क्रमबद्ध कर सकते हैं।

सरल और सामान्य ऑपरेशन सरणी के लिए arrayObject से अधिक prefferable है।

0

ऐरे ऑब्जेक्ट को बढ़ाया जा सकता है और कार्य अधिक हो सकता है। उदाहरण के लिए, अपने संलग्न() फ़ंक्शन माता पिता :: संलग्न()

8

बुला प्रदर्शन की अवधि में से पहले दो दशमलव स्थानों के लिए एक नंबर से प्रारूप सकता है, तो आप एक array और एक ArayObject के बीच कोई वास्तविक अंतर दिखाई नहीं देगा। मैं एक साधारण परीक्षण चलाता हूं। विचार सरणी() और नए ArrayObject का उपयोग करके सरणी बनाना था, और उन्हें मूल्यों की बढ़ती संख्या के साथ भरना था।

<?php 
for($i = 0; $i < 2; $i++){ 
    $method = $i == 0 ? 'array' : 'ArrayObject'; 
    for($j = 0; $j < 7 ; $j++){ 
     for($k = 0; $k < 100; $k++){ 
      $max = pow(10,$j); 
      $array = $method == 'array' ? array() : new ArrayObject; 
      $time = explode(' ',microtime()); 
      $sTime = $time[0] + $time[1]; 
      for($l = 0; $l < $max; $l++){ 
       $array[] = 'foo ' . $i . ':' . $j . ':' . $k . ':' . $l; 
      } 
      $time = explode(' ',microtime()); 
      $eTime = $time[0] + $time[1]; 
      $results[$method][$max][] = $eTime - $sTime; 
     } 
    } 
} 
?> 

परिणाम

method    lines  average (µs) difference between methods (µs) 
array     1   2.470   -1.044 
array     10   8.452   +0.315 
array    100   71.862  +10.719 
array    1,000   773.826  +141.962 
array    10,000  7,868.731  -675.359 
array   100,000  76,954.625 -17,665.510 
array   1,000,000  801,509.550 -84,356.148 
ArrayObject   1   3.514   +1.044 
ArrayObject   10   8.137   -0.315 
ArrayObject   100   61.142  -10.719 
ArrayObject  1,000   631.864  -141.962 
ArrayObject  10,000  8,544.090  +675.359 
ArrayObject  100,000  94,620.135 +17,665.510 
ArrayObject 1,000,000  885,865.698 +84,356.148 

औसत प्रत्येक विधि के लिए 100 परीक्षण और पंक्तियों में से प्रत्येक संख्या की औसत समय है। विधियों के बीच अंतर काफी महत्वहीन है (84 माइक्रोसॉन्ड जब आप दस लाख पंक्तियों से निपटते हैं ...)

मैंने इस परीक्षण को कई बार चलाया है, और क्योंकि अंतर हमेशा माइक्रोसेकंड का सवाल होता है, कभी-कभी एक विधि होती है एक परीक्षण के दौरान और अधिक कुशल है, तो कम अगले परीक्षण के दौरान कुशल ...

पसंद अपनी आवश्यकताओं की निर्भर करेगा:

  • यदि आप सरल सरणियों के साथ सौदा है, और foreach() की तरह एक पाश कर सकते हैं या एक गणना औसत, array काफी है,
  • यदि आपको अधिक जटिल पुनरावृत्तियों, सॉर्टिंग, फ़िल्टरिंग की आवश्यकता है ... ArrayObject class को अपने स्वयं के इटरेटर, विधियों के साथ विस्तार करना आसान है ...
+7

कृपया, PHP का संस्करण निर्दिष्ट करें, यह काफी महत्वपूर्ण है। – Astery

+1

मुझे लगता है कि अंतर की तरह 84 * मिलीसेकंड * (84 365 * माइक्रोसेकंड *) है जब आप दस लाख पंक्तियों से निपटते हैं ... यह नहीं कि ज्यादातर मामलों में अंतर महत्वपूर्ण है। – Erk

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