2011-03-25 13 views
5

संभव डुप्लिकेट:
PHP Arrays: A good way to check if an array is associative or sequential?सरणी सूची क्या है या नहीं जांचें?

नमस्ते :)

मैं सोच रहा था क्या कम से कम (सर्वोत्तम) यदि एक सरणी

एक सूची है की जाँच करने के तरीका है : array('a', 'b', 'c')

या यह एक साहचर्य सरणी है: array('a' => 'b', 'c' => 'd')

FYI: मैं इस की जरूरत है कि यह भी सच है वापस आ जाएगी अगर सरणी अनुक्रमित की गई है एक कस्टम json_encode समारोह बनाने के लिए

+3

[PHP Arrays के संभावित डुप्लिकेट: यह जांचने का एक अच्छा तरीका है कि कोई सरणी सहयोगी या अनुक्रमिक है या नहीं?] (Http://stackoverflow.com/questions/173400/php-arrays-a-good-way-to-check -if-an-array-is-associative-या-अनुक्रमिक) आपको कस्टम 'json_encode' फ़ंक्शन बनाने की आवश्यकता क्यों है? क्या आप एक PHP संस्करण पर हैं जो अभी तक नहीं है? उस मामले के लिए पूर्व निर्मित पैकेज हैं। –

+0

'json_encode' के कार्यान्वयन डाउनलोड के लिए उपलब्ध हैं, तो शायद उन्हें जांचें और उन्हें अनुकूलित करें? यहां एक है: http://www.boutell.com/scripts/jsonwrapper.html – Joost

+0

@Pekka मुझे php फ़ाइल – Teneff

उत्तर

12
function is_assoc($array){ 
    return array_values($array)!==$array; 
} 

नोट लेकिन छेद होता है या नहीं 0 से शुरू करें, या चाबियाँ आदेश नहीं दी जाती हैं। मैं आमतौर पर इस फ़ंक्शन का उपयोग करना पसंद करता हूं क्योंकि यह सर्वोत्तम संभव प्रदर्शन देता है। इन मामलों मैं इस पसंद करते हैं के लिए एक विकल्प के रूप (सिर्फ इतना है कि यह लगभग 4 बार ऊपर की तुलना में धीमी है को ध्यान में रखना):

function is_assoc($array){ 
    return !ctype_digit(implode('', array_keys($array))); 
} 

ksort() का प्रयोग के रूप में Rinuwise टिप्पणी की कुछ धीमा है।

+3

ध्यान दें कि यह काम नहीं करता है, अगर सरणी कुंजी सरणी में क्रम में नहीं है। यदि यह वांछित नहीं है, तो तुलना से पहले सरणी पर ksort() प्रदर्शन करके इसे टाला जा सकता है। – Riimu

+0

आपकी टिप्पणी के लिए धन्यवाद। मैंने उन मामलों के साथ अपने जवाब में सुधार किया। – Slava

+0

यदि "080" जैसी चाबियाँ गलत होंगी। उदाहरण सरणी ('0' => 1, '08' => 2); – ZigZag

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