2010-07-02 16 views
6

जावा और सी ++ जब हम आकार पता नहीं है में - सरणी की तरह PHP में, बजाय प्रयोग के लिए इस्तेमाल नहीं linkedlist आदिएसपीएल बनाम ऐरे: हमें एसपीएल का उपयोग कब करना चाहिए और हमें PHP में ऐरे का उपयोग कब करना चाहिए?

PHP में मौजूद एसपीएल, लेकिन कई बार प्रोग्रामर के सबसे सरणी, का उपयोग क्यों (क्योंकि लोगों को डॉन एसपीएल के बारे में नहीं पता)?

हम PHP और whenSPL में सरणी का उपयोग करना चाहिए और PHP और जावा/सी के बीच इस मामले में क्या अंतर है जब ++?

+0

संबंधित: [? एसपीएल ArrayObject, ArrayIterator, बजाय नियमित सरणियों के RecursiveArrayIterator उपयोग कर के लाभ कर रहे हैं क्या] (http://stackoverflow.com/questions/4072927/what-are-the-benefits-of-using-spl -एरेबोबजेक्ट-एसीटरेटर-रिकर्सिवरायराइट) (नवंबर 2010); [PHP में ArrayAccess इंटरफ़ेस के लाभ?] (Http://stackoverflow.com/q/4319603/367456) (नवंबर 2010) – hakre

उत्तर

2

हर पीएचपी अनुरोध सभी चर को प्रारंभ करना चाहिए और अनुरोध के बाद वे मुक्त कर दिया जाता है। इसके कारण अक्सर ऐसी परिस्थितियां नहीं आतीं जहां विशेष डेटा संरचनाएं (जैसे अधिकतम, लिंक्डलिस्ट या कतार) सरणी से अधिक कुशल होती हैं। शुरुआत के लिए समझने और उपयोग करने के लिए सरणी बहुत सरल हैं। PHP में सी ++ से

अंतर यह है कि सरणियों लंबाई गतिशील है। जब भी आप चाहें तत्व जोड़ सकते हैं।

$arr=array(); 
$arr[]=5; //add integer to array 
echo count($arr); //1 
$arr[]=7; 
echo count($arr); //2 

आप गतिशील रूप से बना सकते हैं और एक और सरणी

$arr[]=array(); 
$arr[2][]=5; 
echo count($arr); //3 
echo count($arr[2]); //1 

इस नई सरणी पैदा करेगा करने के लिए सरणी में जोड़ सकते हैं, मूल्य 5 के साथ तत्व जोड़ सकते हैं और सरणी $ आगमन के तत्व के रूप में जोड़ें।

$arr[][]=5; 

पीएचपी सरणियों में हैश तालिकाओं कर रहे हैं, ताकि आप केवल नहीं पूर्णांक कुंजी लेकिन यह भी तार हो सकता है: सरणी तत्व पूर्णांक है

$arr['somekey']='somevalue'; 

तो प्रत्येक तत्व एक मूल्य संरचना (zval) जो लेता है की आवश्यकता है 16 बाइट्स इसके अलावा एक हैश बाल्टी की आवश्यकता है - जिसमें 36 बाइट्स लगते हैं। यह मूल्य प्रति 52 बाइट देता है। मेमोरी आवंटन शीर्षलेख एक और 8 बाइट्स * 2 लेते हैं - जो 68 बाइट देता है।

PHP में सरणियों के बारे में: http://oreilly.com/catalog/progphp/chapter/ch05.html

+0

डाइनैमिक PHP सरणी का अर्थ है कि हर बार जब नया तत्व डाला जाता है तो नई सरणी बनाई जाती है। या उदाहरण के लिए php सरणी में 100 सेल्स की तरह डिफ़ॉल्ट आकार होता है और यदि सरणी को 100 से अधिक कोशिकाओं को गुणा करके 2 से अधिक की आवश्यकता होती है तो वह बढ़ जाती है .. ?? – Yosef

+0

हर बार नया तत्व बनाया जाता है चर के लिए नई मेमोरी आवंटित की जाती है और हैश के लिए नई मेमोरी आवंटित की जाती है। – codez

1

मानक सरणी का प्रयोग करें, यह ArrayObject से तेज़ है।

उपयोग ArrayObject केवल अपने कस्टम तरीकों के साथ अपने स्वयं निर्दिष्ट सरणियों लागू करने के लिए।

+4

"धीमा" क्यों हमेशा कुछ के खिलाफ पहला तर्क होना चाहिए? – salathe

+1

http://www.php.net/manual/pt_BR/class.arrayobject.php#90371 बेंचमार्क के लिए इस टिप्पणी की जांच करें। भारी आवेदन में प्रदर्शन एक बहुत ही महत्वपूर्ण पैरामीटर है, क्षमा करें। – silent

2

आप दो बड़े पैमाने पर अलग अलग चीजें हैं, लगभग केवल समानता की जा रही है कि वे दोनों (सरणियों और एसपीएल) पीएचपी में उपलब्ध हैं की तुलना करने के लिए कह रहे हैं।

अंत में, यह अनिवार्य रूप से तुलना करने के लिए अनिवार्य रूप से गैरकानूनी होगा, या जब किसी को किसी अन्य कार्य को पूरा करने के लिए उपयोग किया जा सकता है, तो किसी दूसरे के लिए उपयोग किया जाना चाहिए। उस नोट पर, दोनों का उपयोग इंटरविवाइन किया जा सकता है: उदाहरण के लिए, ऑब्जेक्ट्स के साथ काम करते समय सरणी-शैली वाक्यविन्यास का उपयोग करने के लिए ArrayIterator का उपयोग किसी सरणी पर फिर से करने के लिए, या ArrayObject का उपयोग करना।

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

+0

मुझे लगता है कि मैं थोड़ा एसपीएल उत्तेजित करता हूं – Yosef

0

नहीं एक भ्रम हो सकता है necessarilly, क्योंकि लोगों को वेनिला array_push/पॉप कार्यों के साथ जुड़े सरणी के बजाय "SplStack" का उपयोग करने का फैसला कर सकते हैं।या शास्त्रीय तरीके से सरणी का उपयोग करें,

और फिर वहां SplDoublyLinkedList, SplQueue, SplHeap मौजूद है। प्लस ArrayObject।

तो सवाल मान्य है। और जवाब यह है: आप एक और अधिक मानवीय तरीके से ऐसा करते हैं, और यह धीमा है। सी जावा में ++ & की तरह वहाँ मौजूद

एसपीएल आम तौर पर, एक अस्थायी मानक & "ऑफ-द-शेल्फ" वर्गों की नकल करने के & एपीआई है।

आईएमएचओ बहुत देर हो चुकी है।

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

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