डेटा का उपयोग करने के लिए किसी का उपयोग किया जाना चाहिए, ऐरे या ऐरे ऑब्जेक्ट? खोज, क्रमबद्ध और अन्य सरणी जोड़ों की तरह।PHP ऐरे और ArrayObject
उत्तर
मूल प्रकार array
है। यह कुंजी और मानों का नक्शा है जिसे लूप में पढ़ा और पढ़ा जा सकता है।
ArrayObject
एक ऐसा वर्ग है जिसे आप ऑब्जेक्ट बनाने के लिए विस्तारित कर सकते हैं जैसे कि वे सरणी थे। यह count
और sort
जैसी विधियों को लागू करता है जो आपको किसी ऑब्जेक्ट का इलाज करने में सक्षम बनाता है जैसे कि आप किसी सरणी का इलाज करेंगे। यह एसपीएल (मानक PHP पुस्तकालय) का हिस्सा है।
आमतौर पर आप array
का उपयोग करेंगे। आपको पता चलेगा कि आपको ArrayObject
की आवश्यकता है।
अधिकांश समय एक सरणी की आवश्यकता होती है। जब विशेष उपयोग में कार्यक्षमता के लिए विस्तारित किया जाता है तो ArrayObject सबसे उपयोगी होता है।
arrayObject है serialization की आवश्यकता है जब ज्यादातर उपयोगी है।
इसके अलावा आप arrayObject को विस्तारित करके अपना स्वयं का संग्रह वर्ग बना सकते हैं। फिर आप डेटा को स्थानांतरित करने के लिए अपनी कक्षा ऑब्जेक्ट को क्रमबद्ध कर सकते हैं।
सरल और सामान्य ऑपरेशन सरणी के लिए arrayObject से अधिक prefferable है।
ऐरे ऑब्जेक्ट को बढ़ाया जा सकता है और कार्य अधिक हो सकता है। उदाहरण के लिए, अपने संलग्न() फ़ंक्शन माता पिता :: संलग्न()
बुला प्रदर्शन की अवधि में से पहले दो दशमलव स्थानों के लिए एक नंबर से प्रारूप सकता है, तो आप एक 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
को अपने स्वयं के इटरेटर, विधियों के साथ विस्तार करना आसान है ...
क्या आपके पास ऐसा उदाहरण है जो आप करना चाहते हैं? – willoller
मुझे एल्गोरिदम में इसका उपयोग करने के लिए मूल रूप से ऐरे का उपयोग करके खोज, क्रमबद्ध और अन्य जटिल हेरफेर की आवश्यकता है। तो मुझे यह जानने की जरूरत है कि कौन सा बेहतर और तेज़ है। – Imrul