Php में, 0 को खाली माना जाता है?


144

कोड अधिक समझाएगा:

$var = 0;

if (!empty($var)){
echo "Its not empty";
} else {
echo "Its empty";
}

परिणाम "इसका खाली" रिटर्न देता है। मुझे लगा कि खाली () जाँच करेगा कि क्या मैं पहले से ही चर सेट कर चुका हूँ और अंदर मूल्य है। यह "इसका खाली" क्यों लौटाता है ??


15
@stereo emptyशायद सबसे अधिक व्यापक रूप से गलत समझा गया PHP फ़ंक्शन है। जानिए इसका उपयोग कैसे और कब करना है।
deceze

2
@stereo के emptyलिए अनिवार्य रूप से छोटा है isset($var) && $var != false। आपको अपने emptyपैर में खुद को शूट करने के लिए बहुत अजीब होना चाहिए । ; पी
छल

@stereo 1) यह "असंगत" कहाँ है? यह टिन पर कहे अनुसार काम करता है। 2) false"अपरिभाषित चर" त्रुटि को ट्रिगर किए बिना एक चर की तुलना करना बेकार है? अरे ठीक है, लगता है कि आप ऐसा कभी नहीं करते हैं ... 3) एक सुरक्षा संदर्भ में गलत फ़ंक्शन का चयन करने का मतलब यह नहीं है कि फ़ंक्शन स्वयं खराब, बेकार या असंगत है; इसका मतलब यह है कि किसी ने नौकरी के लिए गलत कार्य को चुना।
deceze


18
@ डिसेज़ - अगर कोई फंक्शन इतना व्यापक रूप से गलत समझा जाता है empty(), तो इसका गलत नाम है।
मार्टिंस्टेकली

जवाबों:


189

http://php.net/empty

निम्नलिखित चीजों को खाली माना जाता है:

  • "" (एक रिक्त स्ट्रिंग)
  • 0 (0 एक पूर्णांक के रूप में)
  • 0.0 (एक फ्लोट के रूप में)
  • "0" (एक स्ट्रिंग के रूप में)
  • शून्य
  • असत्य
  • सरणी () (एक खाली सरणी)
  • var $ var; (एक चर घोषित, लेकिन एक वर्ग में मूल्य के बिना)

ध्यान दें कि यह बूलियन के लिए एक जबरदस्ती की सूची के समान है falseemptyबस है !isset($var) || !$varissetइसके बजाय कोशिश करें ।


तो, मुझे इस तरह की जांच करनी चाहिए: अगर (isset ($ var) && $ var! = 0) {Do something} ??
mysqllearner

1
@mysql इस मामले के लिए आप भी उपयोग कर सकते हैं !empty($var), लेकिन ध्यान दें कि यह वैसा नहीं है जैसा आपने प्रश्न में लिखा था। क्या उपयोग करने के लिए पूरी तरह से कौन-से मान आप के रूप में मानते करना चाहते हैं पर निर्भर करता है true। बस के बीच मतभेद की तुलना issetऔर emptyऔर सही स्थिति के लिए सही संयोजन का चयन करें।
deceze

7
@mysqllearner: if issetदेता Trueहै $var=0। लेकिन आपका जो मतलब if(isset($var) && $var != 0)है, वही हैempty
फेलिक्स क्लिंग

अगर यह खाली नहीं है तो @mysqllearner isset का पता लगाता है। यह जाँचने के लिए कि क्या यह खाली है, इसके बजाय! का उपयोग करें!

1
@Deji चूंकि PHP की जड़ें एक वेब भाषा के रूप में हैं, और HTTP अनुरोधों में मान हमेशा स्ट्रिंग होते हैं, इसलिए '0'इसे समकक्ष माना जा रहा है 0। यह PHP का एक मुख्य डिजाइन दर्शन है। मैं मानता हूं कि यह एक अत्यंत बहस का विकल्प है, हालांकि, मैं यहां आपके साथ उस विकल्प पर बहस करने के लिए नहीं हूं। PHP के तर्क के भीतर, माइनस नोटिस के emptyबराबर == falseठीक IMO है। PHP में कुछ चीजें बहुत अलग होनी चाहिए, क्योंकि वे एक अलग विषय है।
deceze

76

मैं सोच रहा था कि किसी ने अत्यंत आसान प्रकार की तुलना तालिका का सुझाव क्यों नहीं दिया । यह सामान्य कार्यों के बारे में हर सवाल का जवाब देता है और ऑपरेटरों की तुलना करता है।

एक स्निपेट:

Expression      | empty($x)
----------------+--------
$x = "";        | true    
$x = null       | true    
var $x;         | true    
$x is undefined | true    
$x = array();   | true    
$x = false;     | true    
$x = true;      | false   
$x = 1;         | false   
$x = 42;        | false   
$x = 0;         | true    
$x = -1;        | false   
$x = "1";       | false   
$x = "0";       | true    
$x = "-1";      | false   
$x = "php";     | false   
$x = "true";    | false   
$x = "false";   | false   

अन्य चीटशीट के साथ, मैं हमेशा इस मेज की हार्डकॉपी अपने डेस्क पर रखता हूं अगर मुझे यकीन नहीं होता


2
आपको अपनी चीट शीट अपडेट करनी चाहिए अब मैं आपको कुछ और जानकारी दूंगा ... 0.0 = true, 0.00 = true, "0.0" = false
Sayed Mohd Ali

34

संख्यात्मक मान के मामले में आपको is_numeric फ़ंक्शन का उपयोग करना चाहिए:

$var = 0;

if (is_numeric($var))
{
  echo "Its not empty";
} 
else 
{
    echo "Its empty";
}

1
जब आपको '0' या 0.
निकू के

12

strlen()इसके बजाय उपयोग करें । मैं कुछ चरों के लिए संभावित मानों के रूप में 1/0 का उपयोग कर एक ही मुद्दे पर भागा। मैं if (strlen($_POST['myValue']) == 0)परीक्षण करने के लिए उपयोग कर रहा हूं कि मेरे चर में कोई चरित्र है या नहीं।


सिर्फ एक त्रुटि लॉग छोड़ @strlen जोड़ने के लिए, सिर्फ मामले में ... एक बड़ा लॉग नहीं बनाने के लिए
मिगुएल

क्यों डालेंगे @strlen? जब तक आप एक वैरिएबल पास करते हैं, तब तक उसे एक त्रुटि नहीं होनी चाहिए। यदि आपका स्ट्रैलेन खाली है, तो यह मान के रूप में 0.
स्केचटैट

2
यदि चर अप्रभावित है, तो मुझे विश्वास है कि आपको एक त्रुटि मिलेगी।
एवरेन युर्टसेन

11

मैं हाल ही में अपने पैंट के साथ इस एक पर नीचे पकड़ा गया था। जिस समस्या से हम अक्सर निपटते हैं वह परेशान चर है - एक ऐसा तत्व कहते हैं जो हो सकता है या नहीं हो सकता है, लेकिन कई तत्वों के लिए, 0(या स्ट्रिंग '0'जो पोस्ट के माध्यम से अधिक सटीक रूप से आएगा, लेकिन फिर भी "फाल्सी" के रूप में मूल्यांकन किया जाएगा। ) ड्रॉपडाउन सूची पर एक वैध मान है।

यदि आपको इसकी आवश्यकता है, empty()तो पहले और फिर strlen()आपका सबसे अच्छा उपयोग करना :

if(!empty($var) && strlen($var)){
    echo '"$var" is present and has a non-falsey value!';
}

6

भाषाई दृष्टि से रिक्त का अर्थ बिना मूल्य के होता है । जैसा कि दूसरों ने कहा है कि आपको isset()यह जांचने के लिए उपयोग करना होगा कि क्या एक चर को परिभाषित किया गया है, जो आप करते हैं।


1
इस सरल उत्तर ने मुझे आसानी से एक 0बनाम nullमुद्दे को स्पष्ट करने में मदद की । धन्यवाद!
जिआकोमो 1968

4

empty()जो कुछ भी मूल्यांकन करता है FALSE, उसके लिए सही है , यह वास्तव !में भेस में एक 'नहीं' ( ) है। मुझे लगता है कि आपका मतलब थाisset()


4

परिवर्तनशील उपयोग में मान के रूप में 0 को स्वीकार करना isset

जाँच करें कि क्या वेरिएबल खाली है

$var = 0;

if ($var == '') {
    echo "empty";
} else {
    echo "not empty"; 
}
//output is empty

जाँचें कि क्या चर सेट है

$var = 0;

if (isset($var)) {
    echo "not empty";
} else {    
    echo "empty";
}
//output is not empty

4

यह मेरे लिए काम कर रहा है!

//
if(isset($_POST['post_var'])&&$_POST['post_var']!==''){
echo $_POST['post_var'];
}

//results:
1 if $_POST['post_var']='1'
0 if $_POST['post_var']='0'
skip if $_POST['post_var']=''

1

निम्नलिखित चीजों को खाली माना जाता है:

  • "" (एक रिक्त स्ट्रिंग)
  • 0 (0 एक पूर्णांक के रूप में)
  • "0" (एक स्ट्रिंग के रूप में)
  • शून्य
  • असत्य
  • सरणी () (एक खाली सरणी)
  • var $ var; (एक चर घोषित, लेकिन एक वर्ग में मूल्य के बिना)

से पीएचपी मैनुअल

आपके मामले $varमें 0, इसलिए empty($var)वापस आ जाएगा true, आप परीक्षण से पहले परिणाम को नकार रहे हैं, इसलिए अन्य ब्लॉक Its emptyआउटपुट के रूप में " " देगा ।


1

मैनुअल से: यदि कोई गैर-रिक्त और गैर-शून्य मान है तो FALSE लौटाता है।

निम्नलिखित चीजों को खाली माना जाता है:

  • "" (एक रिक्त स्ट्रिंग)
  • 0 (0 एक पूर्णांक के रूप में)
  • "0" (एक स्ट्रिंग के रूप में) NULL
  • FALSE सरणी () (एक खाली सरणी) var
  • वर $; (एक चर घोषित, लेकिन एक वर्ग में मूल्य के बिना)

अधिक: http://php.net/manual/en/function.empty.php


1
if (empty($var) && $pieces[$var] != '0') {
//do something
}

मेरे मामले में इस कोड ने काम किया।


0

वास्तव में परेशान है कि बस जाँच करें कि क्या चर सेट है या नहीं। इस मामले में अगर आप जाँच करना चाहते हैं कि क्या आपका चर वास्तव में शून्य या खाली है तो आप इस उदाहरण का उपयोग कर सकते हैं:

$myVar = '';
if (empty($myVar))
{
  echo "Its empty";
}
echo "<br/>";

if ($myVar===0)
{
  echo "also zero!";
}

सिर्फ नोटिस के लिए $ myVar == 0 खाली फ़ंक्शन की तरह कार्य करें।


0

खाली का मतलब खाली होना चाहिए .. जो भी धोखा कहे।

जब मैं करता हूं

$var = '';    
$var = '0';

मुझे उम्मीद करता हूँ की var_dump(empty($var)); झूठे वापस आ जाएंगे।

यदि आप किसी एरे में चीजों की जाँच कर रहे हैं तो आपको हमेशा isset($var)पहले करना होगा ।


0

केवल तब के ($_POST['input_field_name'])!=0बजाय उपयोग !($_POST['input_field_name'])==00 के रूप में खाली नहीं माना जाता है।


0

सुनिश्चित नहीं हैं कि अगर अभी भी लोग स्पष्टीकरण और समाधान की तलाश कर रहे हैं। उपरोक्त टिप्पणियां TRUE / FALSE / 1/0 के बीच अंतरों पर यह सब कहती हैं।
मैं वास्तविक मूल्य प्रदर्शित करने के तरीके के लिए अपने 2 सेंट लाना चाहूंगा।

बूलियन

यदि आप बूलियन डेटाटाइप के साथ काम कर रहे हैं, तो आप TRUE बनाम FALSE परिणाम की तलाश कर रहे हैं; यदि आप इसे MySQL में संग्रहीत करते हैं, तो इसे 1 सम्मान के रूप में संग्रहीत किया जाएगा। 0 (यदि मैं गलत नहीं कर रहा हूँ, तो यह आपके सर्वर की मेमोरी में समान है)।

तो PHP में मान प्रदर्शित करने के लिए, आपको यह जांचने की आवश्यकता है कि क्या यह सच है (1) या गलत (0) और जो कुछ भी आप चाहते हैं उसे प्रदर्शित करें: "TRUE" या "FALSE" या संभवतः "1" या "0"।
ध्यान दें, 0 से बड़ा (या अलग) सब कुछ भी PHP में TRUE के रूप में माना जाएगा। जैसे: 2, "abc", आदि सभी TRUE लौटेंगे।

BIT, टिनिनेट

यदि आप एक संख्या डेटा प्रकार के साथ काम कर रहे हैं, तो जिस तरह से संग्रहीत किया जाता है वह समान है।
मान प्रदर्शित करने के लिए, आपको इसे संख्या के रूप में संभालने के लिए PHP को बताने की आवश्यकता है। मैंने जो सबसे आसान तरीका पाया, उसे 1 से गुणा करना है।


0

उचित उदाहरण। डेटाबेस में सिर्फ इंट टाइप फील्ड (उदाहरण मोबाइल नंबर) बनाएं और निम्न डेटाबेस के लिए एक फॉर्म के माध्यम से रिक्त करें या SQL का उपयोग करके सम्मिलित करें। इसे डेटाबेस 0 में सहेजा जाएगा क्योंकि यह इंट प्रकार है और इसे रिक्त या रिक्त के रूप में सहेजा नहीं जा सकता है। इसलिए यह रिक्त है, लेकिन इसे 0. के रूप में सहेजा जाएगा, ताकि जब आप PHP के माध्यम से डेटा प्राप्त करें और रिक्त मानों की जांच करें। यह बहुत उपयोगी है और तार्किक रूप से सही है।

0.00, 0.000, 0.0000 .... 0.0 ... 0 भी खाली है और ऊपर के उदाहरण का उपयोग फ्लोट, डबल, दशमलव जैसे दशमलव में विभिन्न प्रकार के मूल्यों को संग्रहीत करने के लिए भी किया जा सकता है (दशमलव में भिन्न वेरिएंट जैसे 0.000 और इतने पर हैं।


0

मान सेट है या नहीं यह जाँचने के लिए आपको isset () का उपयोग करने की आवश्यकता है।


हाय @Vershetty, स्टैक ओवरफ्लो में आपका स्वागत है। आपके उत्तर के लिए धन्यवाद, हालांकि यह मौजूदा, अधिक विस्तृत उत्तरों में कुछ भी नया नहीं जोड़ता है। या तो विस्तार को जोड़ने के लिए उत्तर को संपादित करें जो अन्य उत्तरों से गायब है या अपने जवाब को हटाने पर विचार करें यदि यह कुछ नया नहीं जोड़ता है।
ग्रैसी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.