कुछ सभ्य जवाब, लेकिन बस मैंने सोचा कि अगर PHP एक सरणी खाली है, तो अधिक स्पष्ट रूप से समझाने के लिए मैं थोड़ा विस्तार करूंगा।
मुख्य नोट्स:
कुंजी (या कुंजी) के साथ एक सरणी को PHP द्वारा खाली नहीं के रूप में निर्धारित किया जाएगा ।
जैसा कि सरणी मानों को मौजूद होने के लिए कुंजियों की आवश्यकता होती है, किसी सरणी में मान होना या न होना यह निर्धारित नहीं करता है कि क्या यह खाली है, केवल अगर कोई कुंजी नहीं है (और इसलिए अन्य मान)।
इसलिए किसी सरणी की जाँच करना empty()
यह नहीं बताता कि आपके पास मान हैं या नहीं, यह आपको बताता है कि क्या सरणी खाली है, और कुंजियाँ किसी सरणी का हिस्सा हैं।
तो विचार करें कि आप किस तरह से जाँच करने की विधि का उपयोग करने से पहले अपने सरणी का उत्पादन कर रहे हैं। जब किसी उपयोगकर्ता के पास प्रत्येक प्रपत्र फ़ील्ड में एक सरणी नाम (यानी ) होता है, तो
ईजी एक सरणी में कुंजियाँ होंगीname="array[]"
। प्रत्येक क्षेत्र के लिए
एक गैर खाली सरणी का उत्पादन किया जाएगा क्योंकि प्रत्येक प्रपत्र फ़ील्ड के सरणी के लिए स्वत: इंक्रीमेंट किए गए प्रमुख मान होंगे।
उदाहरण के लिए ये सरणियाँ लें:
/* Assigning some arrays */
// Array with user defined key and value
$ArrayOne = array("UserKeyA" => "UserValueA", "UserKeyB" => "UserValueB");
// Array with auto increment key and user defined value
// as a form field would return with user input
$ArrayTwo[] = "UserValue01";
$ArrayTwo[] = "UserValue02";
// Array with auto incremented key and no value
// as a form field would return without user input
$ArrayThree[] = '';
$ArrayThree[] = '';
यदि आप उपरोक्त सरणियों के लिए सरणी कुंजियों और मूल्यों को प्रतिध्वनित करते हैं, तो आपको निम्नलिखित मिलते हैं:
ARRAY ONE:
[UserKeyA] => [UserValueA]
[UserKeyB] => [UserValueB]
ARRAY TWO:
[0] => [UserValue01]
[1] => [UserValue02]
ARRAY THREE:
[०] => []
[१] => []
और empty()
निम्न परिणाम के साथ उपरोक्त सरणियों का परीक्षण :
ARRAY ONE:
$ ArrayOne खाली नहीं है
ARRAY TWO:
$ ArrayTwo खाली नहीं है
ARRAY THREE:
$ ArrayThree खाली नहीं है
जब आप कोई एरे असाइन करते हैं तो एरे हमेशा खाली रहेगा लेकिन उसके बाद उसका उपयोग न करें, जैसे:
$ArrayFour = array();
यह खाली होगा, यानी यदि empty()
ऊपर का उपयोग कर रहा है तो PHP TRUE लौटाएगा ।
इसलिए यदि आपके सरणी में कुंजियाँ हैं - या तो उदाहरण के लिए किसी प्रपत्र के इनपुट नाम या यदि आप उन्हें मैन्युअल रूप से असाइन करते हैं (जैसे डेटाबेस स्तंभ नाम के साथ एक सरणी बनाएँ, लेकिन डेटाबेस से कोई मान / डेटा नहीं है), तो सरणी नहीं होगी empty()
।
इस स्थिति में, आप सरणी को फ़ॉरच में लूप कर सकते हैं, परीक्षण कर सकते हैं कि क्या प्रत्येक कुंजी का मान है। यह एक अच्छी विधि है अगर आपको किसी भी तरह से सरणी के माध्यम से चलाने की आवश्यकता है, तो शायद कुंजियों की जांच करना या डेटा को साफ करना।
हालाँकि, यह सबसे अच्छा तरीका नहीं है अगर आपको बस यह जानने की ज़रूरत है कि "यदि मान मौजूद हैं" TRUE या FALSE देता है । यह निर्धारित करने के लिए विभिन्न तरीके हैं कि क्या किसी सरणी में कोई मान है जब यह पता होगा कि इसमें चाबियाँ होंगी। एक फ़ंक्शन या वर्ग सबसे अच्छा दृष्टिकोण हो सकता है, लेकिन हमेशा की तरह यह आपके पर्यावरण और सटीक आवश्यकताओं पर निर्भर करता है, साथ ही साथ अन्य चीजें जैसे कि आप वर्तमान में सरणी (यदि कुछ भी) के साथ करते हैं।
यहाँ एक दृष्टिकोण है जो किसी सरणी के मान के जाँचने के लिए बहुत कम कोड का उपयोग करता है:
उपयोग करना array_filter()
:
उन्हें कॉलबैक फ़ंक्शन में पास करने वाले सरणी में प्रत्येक मान पर Iterates। यदि कॉलबैक फ़ंक्शन सही है, तो सरणी से वर्तमान मान परिणाम सरणी में वापस आ जाता है। सरणी कुंजी संरक्षित हैं।
$EmptyTestArray = array_filter($ArrayOne);
if (!empty($EmptyTestArray))
{
// do some tests on the values in $ArrayOne
}
else
{
// Likely not to need an else,
// but could return message to user "you entered nothing" etc etc
}
चल रहा है array_filter()
सभी तीन उदाहरण सरणियों पर (इस जवाब में पहली कोड ब्लॉक में बनाया गया) निम्नलिखित में परिणाम:
ARRAY ONE:
$ अरोनोन खाली नहीं है
ARRAY TWO:
$ arraytwo खाली नहीं है
ARRAY THREE:
$ arraythree खाली है
इसलिए जब कोई मान नहीं होता है, array_filter()
तो नई सरणी बनाने के लिए कुंजियों या नहीं, का उपयोग करें और फिर जांचें कि मूल सरणी में कोई मान थे या नहीं, तो नया सरणी खाली है।
यह आदर्श और थोड़ा गड़बड़ नहीं है, लेकिन अगर आपके पास एक विशाल सरणी है और किसी अन्य कारण से इसके माध्यम से लूप करने की आवश्यकता नहीं है, तो कोड की आवश्यकता के मामले में यह सबसे सरल है।
मैं ओवरहेड्स की जांच करने में अनुभवी नहीं हूं, लेकिन अगर मूल्य पाया जाता है, तो इसका उपयोग करने array_filter()
और foreach
जांच करने के बीच के अंतर को जानना अच्छा होगा ।
जाहिर है कि बेंचमार्क को विभिन्न मापदंडों पर, छोटे और बड़े सरणियों पर और जब मूल्य हैं और नहीं आदि की आवश्यकता होगी।