मैं इस सवाल पर मेरी 2 सेंट जोड़ने के लिए, के बाद से मैं एक मध्यम मार्ग बाहर याद आ रही थी चाहता था।
जैसा कि पहले ही कहा था कि isset()
तो यह false
वापस आ जाएगी कि अगर मूल्य null
जहां array_key_exists()
केवल जाँच करेगा कुंजी सरणी में मौजूद रहने पर है कुंजी के मान का मूल्यांकन करेंगे।
$a = [null, true];
isset($a[0]) # 0.3258841 - false
isset($a[1]) # 0.28261614 - true
isset($a[2]) # 0.26198816 - false
array_key_exists(0, $a) # 0.46202087 - true
array_key_exists(1, $a) # 0.43063688 - true
array_key_exists(2, $a) # 0.37593913 - false
isset($a[0]) || array_key_exists(0, $a) # 0.66342998 - true
isset($a[1]) || array_key_exists(1, $a) # 0.28389215 - true
isset($a[2]) || array_key_exists(2, $a) # 0.55677581 - false
array_key_isset(0, $a) # 1.17933798 - true
array_key_isset(1, $a) # 0.70253706 - true
array_key_isset(2, $a) # 1.01110005 - false
मैं इस के साथ इस कस्टम समारोह से परिणाम जोड़ दिया है:
मैं PHP 7 का उपयोग कर एक सरल बेंचमार्क दौड़ा दिया है, दिखाए गए परिणामों समय यह यात्रा समाप्त करने के लिए ले लिया है बेंचमार्क पूरा करने के लिए और साथ ही:
function array_key_isset($k, $a){
return isset($a[$k]) || array_key_exists($k, $a);
}
के रूप में देखा जाता है और पहले से ही बताया isset()
एफएएस है परीक्षण विधि लेकिन यदि मान null
है तो यह झूठी वापसी कर सकता है। यह अवांछित परिणाम दे सकता है और यदि ऐसा है तो आमतौर पर array_key_exists()
का उपयोग करना चाहिए।
हालांकि एक मध्यम तरीका है और यह isset() || array_key_exists()
का उपयोग कर रहा है। इस कोड को आम तौर पर तेजी समारोह isset()
और अगरisset()
रिटर्न झूठी उसके बाद ही उपयोग array_key_exists()
मान्य करने के लिए उपयोग कर रहा है। ऊपर की तालिका में दिखाया गया है, यह स्पष्ट रूप से isset()
पर कॉल करने के रूप में तेज़ है।
हां, यह एक समारोह में लिखने और लपेटने के लिए थोड़ा और धीमा है लेकिन बहुत आसान है। यदि आपको प्रदर्शन के लिए इसकी आवश्यकता है, तो बड़े डेटा की जांच करें, आदि इसे पूर्ण लिखें, अन्यथा यदि यह 1 बार उपयोग है जो फ़ंक्शन array_key_isset()
में बहुत मामूली ओवरहेड नगण्य है।
क्या आपने वास्तव में * कोशिश की * जो तेज है? – Tomalak
मैंने कोई बेंचमार्क नहीं चलाया है, नहीं। क्या मुझे पूछने से पहले चाहिए? – alex
'isset' कभी भी 'array_key_exists' की तरह व्यवहार नहीं करेगा, कोड उदाहरण जो माना जाता है कि यह व्यवहार करता है, यदि कुंजी मौजूद नहीं है तो नोटिस फेंक देता है। – deceze