2012-02-29 21 views
7

यदि PHP में सरणी कुंजी के लिए कुछ प्रकार की सीमाएं हैं? लंबाई? स्वीकार्य तार नहीं है?PHP सहयोगी सरणी की कुंजी (अनुक्रमणिका) सीमाएं?

official documentation में केवल यह पाया गया, लेकिन कुंजी सीमाओं के बारे में कोई जानकारी नहीं है।

एक कुंजी या तो एक पूर्णांक या स्ट्रिंग हो सकती है। यदि एक कुंजी पूर्णांक का मानक प्रतिनिधित्व है, तो इसका अर्थ इस प्रकार किया जाएगा (यानी "8" 8 के रूप में व्याख्या किया जाएगा, जबकि "08" को "08" के रूप में व्याख्या किया जाएगा)। कुंजी में फ्लोट पूर्णांक के लिए छोटा कर दिया जाता है। अनुक्रमित और साहचर्य सरणी प्रकार PHP में एक ही प्रकार, जो दोनों पूर्णांक और स्ट्रिंग सूचकांक शामिल कर सकते हैं कर रहे हैं। *

उत्तर

4

What is the max key size for an array in PHP?

यह सवाल लगभग ठीक उसी है। लेकिन अगर आप कुछ भी अनौपचारिक पर भरोसा नहीं करना चाहते हैं, तो बस कम छोटी चाबियों का उपयोग करने के लिए चिपके रहें। आप इसके कुछ प्रदर्शन लाभ भी प्राप्त कर सकते हैं।

संपादित करें: और The PHP Manual के रूप में कहते हैं:

ध्यान दें: यह कोई समस्या नहीं है एक स्ट्रिंग बहुत बड़े बनने के लिए। PHP एक स्ट्रिंग के आकार पर कोई सीमा लागू नहीं करता है; एकमात्र सीमा कंप्यूटर की उपलब्ध स्मृति है जिस पर PHP चल रहा है ..

+0

महान ध्वनि सामान्य रूप में सरणियों पर एक लूट ले जाना चाहिए और क्या डेटाटाइप्स अनुमति और सामान कर रहे हैं ..

आशा .. इस मदद करता है। मुझे कुछ विशिष्ट डेटा उपचार के लिए लंबी चाबियाँ चाहिए, इसलिए प्रदर्शन की कोई सवाल नहीं है, केवल कार्यक्षमता। यह जांचने की आवश्यकता है कि कोई "वर्जित" वर्ण नहीं है, यह प्रश्न का दूसरा भाग है। –

+1

स्ट्रिंग्स के पास वर्जित वर्ण नहीं हैं। हालांकि तारों में बैकस्लैश के बारे में जागरूक रहें/क्योंकि यह अगले पत्र से बच जाएगा। – MichaelH

+1

PHP डॉक्स में "लंबे तारों के लिए कोई समस्या नहीं" नोट उद्धृत करने के लिए शून्य। इसका जरूरी अर्थ यह नहीं है कि किसी सरणी में लंबी कुंजी प्रदर्शन के लिए या अन्य कारणों से कोई समस्या नहीं है। यह सच हो सकता है, लेकिन उद्धृत नोट यह नहीं कहता है। – matteo

9

किसी सरणी में कुंजी के रूप में उपयोग की जाने वाली कोई भी स्ट्रिंग हैश हो जाती है। Md5() और sha1() के लिए एनालॉगस इस हैशिंग ने ज्ञात लंबाई में वर्णों (संभावित रूप से गीगाबाइट) को कम कर दिया है। एमडी 5() या sha1() के विपरीत सरणी की आंतरिक हैशिंग तंत्र आपकी स्ट्रिंग को एक पूर्णांक में परिवर्तित कर देगा, फिर इसे सरणी के अंदर एक बाल्टी को संबोधित करने के लिए उपयोग किया जा सकता है। PHP के सरणी सत्य/असली सरणी नहीं हैं - वे आंतरिक रूप से कुछ प्रकार के लिंक्ड हैशैप हैं। यह मानते हुए कि कई तार एक ही हैश पर उबाल सकते हैं, प्रत्येक बाल्टी एक सूची है। यदि एक ही बाल्टी के भीतर कई तत्व हैं, तो प्रत्येक कुंजी का मूल्यांकन किया जाना चाहिए। यह कहने के बिना चला जाता है कि छोटी कुंजियों की तुलना 1 एमबी से अधिक टेक्स्ट की तुलना में की जाती है।

टीएल; डीआर: हालांकि आप PHP द्वारा सीमित नहीं हैं, आपको स्वयं को सीमित करना चाहिए। यदि आपके पास काफी लंबा तार है, तो मुख्य लंबाई को कम करने के लिए उन्हें md5() या sha1() (या वास्तव में किसी अन्य हैशिंग फ़ंक्शन) के माध्यम से चलाने पर विचार करें।

+0

पता नहीं था, आंतरिक रूप से कुंजी क्या है, स्पष्टीकरण के लिए धन्यवाद। दरअसल, कुंजी लंबाई को कम करने के लिए अतिरिक्त एमडी 5 बनाने के लिए अच्छा विचार लगता है। –

+2

क्या आप खुद को भ्रमित नहीं करते हैं? यदि तार आंतरिक रूप से धोए जाते हैं, तो आपको "काफी लंबा" स्ट्रिंग क्यों है? उल्लेख नहीं है कि आप यूनिकिटी की सैद्धांतिक गारंटी खो देंगे (इसलिए आप क्या करते हैं? क्या आप सूचियों आदि के साथ पूरी डेटा संरचना को फिर से शुरू करते हैं?) आपका टीएल; डीआर भाग पहले पैराग्राफ का विरोध करता है और मुझे कोई तर्क नहीं दिख रहा है इसके पीछे। – matteo

-2

क्या आप वाकई कुंजी पर प्रतिक्रिया कर रहे हैं? या आप मूल्य का मतलब है?

साहचर्य सरणियों के साथ

: $ सरणी = नई सरणी ( नई सरणी ( "कुंजी" => "मूल्य" ) );

.. कुंजी मैं theorie में लगता है के लिए के रूप में वहाँ तथापि लंबाई करने के लिए कोई सीमा नहीं है .. लंबे कुंजी chosing एक अच्छा विचार है, तो आप उन्हें एक बहुत reusre चाहता हूँ नहीं है ..

के लिए के रूप में

मूल्यों तुम सिर्फ

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