दिलचस्प पोस्ट
सीएसएस '>' चयनकर्ता; यह क्या है? क्या सी # असिनीकृत चर खतरनाक है? MySQL में पुनरावर्ती चयन क्वेरी कैसे करें? SQL सर्वर के टाइमस्टैम्प कॉलम को डेटटाईम प्रारूप में कनवर्ट करने के लिए कैसे करें पीडीओ तैयार एक क्वेरी में एकाधिक पंक्तियों को सम्मिलित करता है बाहरी बालों को एक प्रारंभिक सूची में कब छोड़ा जा सकता है? आवेदन को संभालनेडिडबैकअक्टिव- "ऐप सक्रिय होने पर एक दृश्य नियंत्रक कैसे प्रतिक्रिया कर सकता है?" बीडीएस 2006 सी छिपी हुई मेमोरी मैनेजर टकराव (कक्षा नया / हटाएं बनाम एएनआईस्ट्रिंग) अनुकूलन समयपूर्व कब है? निकालें और जार से डीएलएल लोड एक गिट कमेटी खोजना जिससे कि किसी भी शाखा में एक स्ट्रिंग पेश की गई जावा में स्ट्रिंग () को ठीक से कैसे ओवरराइड करें? एक एन्यूम में टी को प्रतिबंधित करने के लिए सामान्य विधि बनाएं git submodule अद्यतन SetTag () getTag () दृश्य के तरीकों का मुख्य उद्देश्य क्या है?

Isset और array_key_exists के बीच का अंतर

निम्न दो फ़ंक्शन कॉल कैसे करें:

isset($a['key']) array_key_exists('key', $a) 

वेब के समाधान से एकत्रित समाधान "Isset और array_key_exists के बीच का अंतर"

array_key_exists निश्चित रूप से आपको बताएंगे कि क्या एक कुंजी एक सरणी में मौजूद है, जबकि isset केवल true हो जाएगी यदि कुंजी / चर मौजूद है और null नहीं है

 $a = array('key1' => 'フーバー', 'key2' => null); isset($a['key1']); // true array_key_exists('key1', $a); // true isset($a['key2']); // false array_key_exists('key2', $a); // true 

एक और महत्वपूर्ण अंतर है isset शिकायत नहीं करता है जब $a मौजूद नहीं है, जबकि array_key_exists करता है

array_key_exists और array_key_exists बीच, हालांकि दोनों बहुत तेज़ हैं [O(1)] , जारी करना काफी तेज है अगर यह जांच कई हजारों बार हो रही है, तो आप isset का उपयोग करना चाहते हैं

यह ध्यान दिया जाना चाहिए कि वे समान नहीं हैं, हालांकि – जब सरणी कुंजी मौजूद है, लेकिन मान null , isset false लौटाएगा और array_key_exists true वापस आएंगे यदि मान null , तो आपको array_key_exists का उपयोग करने की आवश्यकता है

एक वाक्य में, यदि सरणी मान null , तो array_key_exists सत्य रिटर्न करते हैं जबकि isset false देता है

यदि आप null मूल्यों की परवाह नहीं करते हैं, तो प्रस्तुति का उपयोग करें जो कि तेज़ है क्योंकि यह एक भाषा का निर्माण होता है, फ़ंक्शन नहीं।

सरणियों पर काम करते समय मुख्य अंतर यह है कि array_key_exists true जब मान null , जबकि isset false लौटाएगा जब सरणी मान null सेट होता है।

PHP प्रलेखन साइट पर isset देखें

एक पुराने प्रश्न का उत्तर नहीं है क्योंकि उत्तर यहां 'चेतावनी' समस्या को हल करने के लिए लगता है (स्पष्टीकरण निम्न है)

असल में, जाँच के इस मामले में कि एक कुंजी एक सरणी में मौजूद है, isset

  • बताता है कि अभिव्यक्ति (एरे) को परिभाषित किया गया है, और कुंजी सेट है
  • कोई चेतावनी या त्रुटि अगर var परिभाषित नहीं है, एक सरणी नहीं …
  • लेकिन गलत देता है अगर उस कुंजी का मान रिक्त है

और array_key_exists

  • बताता है कि यदि कोई कुंजी एक सरणी में मौजूद है, जैसा कि नाम का अर्थ है
  • लेकिन एक चेतावनी देता है यदि सरणी पैरामीटर कोई सरणी नहीं है

तो हम कैसे जांच कर सकते हैं कि कोई कुंजी मौजूद है जो कि एक चर में शून्य हो

  • वह हो सकता है या एक सरणी नहीं हो सकता है
  • (या इसी तरह एक बहुआयामी सरणी है जिसके लिए कुंजी की जांच मंद 2 पर होती है और मंद 1 मान 1 सेंट मंद (आदि …) के लिए एक सरणी नहीं हो सकता है

एक चेतावनी प्राप्त किए बिना, मौजूदा कुंजी को गुम होने के बिना जब इसका मान शून्य है (PHP डीवर्स क्या सोच रहे थे यह भी एक दिलचस्प सवाल होगा, लेकिन निश्चित रूप से SO पर प्रासंगिक नहीं है)। और निश्चित रूप से हम @

 isset($var[$key]); // silent but misses null values array_key_exists($key, $var); // works but warning if $var not defined/array 

ऐसा लगता है कि is_array को समीकरण में शामिल किया जाना चाहिए, लेकिन यदि $var परिभाषित नहीं है, तो यह एक चेतावनी देता है, ताकि एक समाधान हो:

 if (isset($var[$key]) || isset($var) && is_array($var) && array_key_exists($key, $var)) ... 

जो तेजी से होने की संभावना है अगर परीक्षण मुख्यतः गैर-शून्य मानों पर है अन्यथा अधिकांश सरणी मूल्यों के साथ एक सरणी के लिए

 if (isset($var) && is_array($var) && array_key_exists($key, $var)) ... 

काम करेंगे

PHP फ़ंक्शन array_key_exists() यह निर्धारित करता है कि कोई विशेष कुंजी, या संख्यात्मक अनुक्रमणिका, एक सरणी के तत्व के लिए मौजूद है या नहीं। हालांकि, यदि आप यह निर्धारित करना चाहते हैं कि कोई कुंजी मौजूद है और किसी मूल्य से जुड़ी है, तो PHP भाषा के निर्माण isset() आपको बता सकती है कि (और यह मान null नहीं है)। array_key_exists() कुंजी / अनुक्रमणिका के मूल्य के बारे में जानकारी नहीं लौटा सकता

समारोह isset() तेज है, http://www.php.net/manual/en/function.array-key-exists.php#82867 जांचें

@ ऑपरेशन के साथ @ डीसेज़ का जवाब देने के लिए पूरक (एक बीजीय जिज्ञासा के रूप में), और उन मामलों को इंगित करते हैं जहां @ बेहतर उपयोग करने के लिए "बेहतर" है … यदि आपको (लॉग-इन नहीं) और सूक्ष्म-प्रदर्शन अनुकूलन की आवश्यकता है तो वास्तव में बेहतर नहीं है:

  • array_key_exists : यदि एक कुंजी एक सरणी में मौजूद है तो सत्य है;
  • isset : true अगर कुंजी / चर मौजूद है और null नहीं है [ array_key_exists से अधिक ];
  • @$array['key'] : यदि कुंजी / चर मौजूद है और नहीं है ( null या '' या 0) ; [इतना धीमा?]
 $a = array('k1' => 'HELLO', 'k2' => null, 'k3' => '', 'k4' => 0); print isset($a['k1'])? "OK $a[k1].": 'NO VALUE.'; // OK print array_key_exists('k1', $a)? "OK $a[k1].": 'NO VALUE.'; // OK print @$a['k1']? "OK $a[k1].": 'NO VALUE.'; // OK // outputs OK HELLO. OK HELLO. OK HELLO. print isset($a['k2'])? "OK $a[k2].": 'NO VALUE.'; // NO print array_key_exists('k2', $a)? "OK $a[k2].": 'NO VALUE.'; // OK print @$a['k2']? "OK $a[k2].": 'NO VALUE.'; // NO // outputs NO VALUE. OK . NO VALUE. print isset($a['k3'])? "OK $a[k3].": 'NO VALUE.'; // OK print array_key_exists('k3', $a)? "OK $a[k3].": 'NO VALUE.'; // OK print @$a['k3']? "OK $a[k3].": 'NO VALUE.'; // NO // outputs OK . OK . NO VALUE. print isset($a['k4'])? "OK $a[k4].": 'NO VALUE.'; // OK print array_key_exists('k4', $a)? "OK $a[k4].": 'NO VALUE.'; // OK print @$a['k4']? "OK $a[k4].": 'NO VALUE.'; // NO // outputs OK 0. OK 0. NO VALUE 

पी एस: आप इस पाठ को बदल सकते हैं / सही / पूरक कर सकते हैं, यह एक विकी है।

दोनों ठीक उसी तरह नहीं हैं मैं सटीक मतभेदों को याद नहीं कर सकता था, लेकिन यह निर्धारित करने के लिए कि क्या PHP में एक सरणी कुंजी मौजूद है, तेज और बेहतर क्या है? ।

सामान्य सहमति आम तौर पर जब भी संभव हो जाती है, क्योंकि यह भाषा का निर्माण होता है और इसलिए तेज़ होता है हालांकि, मतभेदों को ऊपर उल्लिखित किया जाना चाहिए।