2011-03-05 19 views
7

जोड़ते समय एक PHP सरणी का स्मृति उपयोग यदि मैं एक PHP गैर-एसोसिएटिव सरणी का उपयोग करना चाहता हूं और एक बड़ी कुंजी जोड़ूं, PHP कितनी मेमोरी आवंटित करेगा?एक विशाल संख्यात्मक कुंजी

$myArray = Array(); 
$myArray[6000] = "string linked to ID 6000"; 
$myArray[7891] = "another key-value pair"; 

विल पीएचपी भी अप्रयुक्त कुंजी 0-5999 और 6001-7890 के लिए स्मृति को आबंटित?

उत्तर

13

नहीं, PHP इसे सी शैली सरणी की तरह लागू नहीं करता है। पीपी एरे सहयोगी कंटेनर हैं, php article on arrays राज्यों के रूप में।

PHP में एक सरणी वास्तव में एक आदेश दिया गया है मानचित्र। नक्शा एक प्रकार है जो मानों को कुंजी से जोड़ता है।

चूंकि आदेश संरक्षित है, इसलिए सरणी किसी प्रकार का बाइनरी खोज पेड़ होगा। यदि आप बाइनरी सर्च पेड़ से अपरिचित हैं, तो मैं सुझाव देता हूं कि अधिक जानने के लिए एक अच्छी डेटा स्ट्रक्चर बुक उठाएं या this wikipedia article को रैंडडाउन के लिए देखें। उपरोक्त आपका उदाहरण दो नोड्स के साथ एक बाइनरी खोज पेड़ प्रदान करेगा - एक कुंजी 6000 पर डेटा के लिए, दूसरा 7891 के लिए।

+10

ध्यान दें कि यदि आप json_encode() के माध्यम से इसे पास करते हैं, तो 0-5999 कुंजी बनाएगा - जेसन को PHP के स्पैर्स सरणी पसंद नहीं हैं। –

+0

जब मैं '$ myArray [strtotime ($ date)] = ... 'स्मृति का यह रन करता है, जो अन्यथा सुझाव देता है। –

+0

नहीं, whupps। मैं एक बड़ी संख्या के साथ एक स्ट्रिंग इंडेक्स करने की कोशिश कर रहा था। वह दुर्घटनाग्रस्त हो जाएगा। बेवकूफ गतिशील टाइपिंग। –

2

यह 0-5999 इंडेक्स के लिए स्मृति आवंटित नहीं करेगा।

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