根据https://newaurora.pixnet.net/blog/post/171735396-php-isset%28%29%E5%92%8Cempty%28%29%E7%9A%84%E5%8D%80%E5%88%A5
所描述的isset empty 来做练习
$b = NUll;$c = 0;$f = "0";$d = 1;$e = ""; $g = "Abc";//下面用isset() empty()函数来测试//isset()函数是用来判断变数是不是有存在,如果有就回传 1(true),如果没有就回传空值//empty()函数用来判断"值"是不是空的,如果没有就回传 1(true),如果有"值"就不回传// a不存在// isset a=// empty a=TRUE(1)echo "isset a=" . isset($a) . "<br>"; //$a是存在吗? => 没有就回传空值echo "empty a=" . empty($a) . "<br>"; //$a是空的吗? => 是空的 => empty a=1// b=NULL// isset b=// empty b=TRUE(1)echo "isset b=" . isset($b) . "<br>"; //$b是存在吗? => 没有就回传空值echo "empty b=" . empty($b) . "<br>"; //$b是空的吗? => 是空的 => empty b=1// c=0 (int)// isset c=TRUE(1)// empty c=TRUE(1)// 0(int) 被empty当成没有了?!!echo "isset c=" . isset($c) . "<br>"; //$c是存在吗? => 有存在回传1echo "empty c=" . empty($c) . "<br>"; //$c是空的吗? => 0(int)是空的 => empty c=1echo "-----------------------------<br>";// f="0" (string)// isset f=TRUE(1)// empty f=TRUE(1)// "0"(string) 被empty当成没有了?!!echo "isset f=" . isset($f) . "<br>"; //$f是存在吗? => 有存在回传1echo "empty f=" . empty($f) . "<br>"; //$f是空的吗? => 0(string)是空的 => empty f=1// d=1 (int)// isset d=TRUE(1)// empty d=echo "isset d=" . isset($d) . "<br>"; //$d是存在吗? => 有存在回传1echo "empty d=" . empty($d) . "<br>"; //$d是空的吗? => 1(int)有值 => 不回传// e="" (string)// isset e=TRUE(1)// empty e=TRUE(1)echo "isset e=" . isset($e) . "<br>"; //$e是存在的吗 => 有存在回传1echo "empty e=" . empty($e) . "<br>"; //$e是空的吗? => ""(string)是空的 => empty e=1// g="Abc" (string)// isset g=TRUE(1)// empty g=echo "isset g=" . isset($g) . "<br>"; //$g是存在吗? => 有存在回传1echo "empty g=" . empty($g) . "<br>"; //$g是空的吗? => "Abc"(string)有值 => 不回传
b=NULL
isset b=
在PHP手册中就有说到
https://www.php.net/isset
isset() will return FALSE if testing a variable that has been set to NULL
stackoverflow 中的问题
https://stackoverflow.com/questions/7191626/isset-and-empty-what-to-use
官方出的比较Table表
https://www.php.net/manual/en/types.comparisons.php
比较特别的状况_浮点数 与 字串"浮点数"
拿在上述中的 c=0(int) 与 f="0"(string)中
c = 0 //isset c=TRUE(1) empty c=TRUE(1)
f="0" //isset f=TRUE(1) empty f=TRUE(1)
$a = 0;//照里来说// isset a=TRUE(1)// empty a=TRUE(1)//事实是// isset a=1// empty a=1echo "isset a=" . isset($a) . "<br>";echo "empty a=" . empty($a) . "<br>";$b = 0.00;//照里来说// isset b=TRUE(1)// empty b=TRUE(1)//事实是// isset b=1// empty b=1echo "isset b=" . isset($b) . "<br>";echo "empty b=" . empty($b) . "<br>";$c = "0.0" . "<br>";//照里来说// isset c=TRUE(1)// empty c=TRUE(1)//事实是// isset c=1// ** empty c=echo "isset c=" . isset($c) . "<br>";echo "empty c=" . empty($c) . "<br>"; // 此判定有值 => 不回传
$c = "0.0"
empty "0.0" = 判定有值... => 不回传
就某些状况真的容易搞错就是了
<---2020-05-26更新--->
今天同事问了个问题,结果自己也搞混了empty()
假如阵列里的第一笔是空值,那阵列是否为空;
个人一直是以 是否为空值 来做empty的逻辑判断,但程式再跑时
array就是一笔一笔去跑的,所以empty(array(第一笔资料为0,或是空值时)) empty会过吗?
的问题就出来了
假如资料长这样
$a = array( array('0', ''), array('name', 'jamce'), array('ID', 123), ); print_r($a); if (empty($a)){ echo 'a is empty'; } else { echo 'a is not empty'; }
可以发现print出来是这样
Array( [0] => Array ( [0] => 0 [1] => ) [1] => Array ( [0] => name [1] => jamce ) [2] => Array ( [0] => ID [1] => 123 ))a is not empty
那改成这样呢?
$a = array( array('', ''), //第一笔的资料为空 array('name', 'jamce'), array('ID', 123), );
print出来是这样,第一笔 的第一个值为空
Array( [0] => Array ( [0] => [1] => ) [1] => Array ( [0] => name [1] => jamce ) [2] => Array ( [0] => ID [1] => 123 )) // a is not empty
喔喔!果然不是空值
$a = array( array('', ''), // 改成全空值 array('', ''), array('', ''), );
Array( [0] => Array ( [0] => // 还有key [1] => ) [1] => Array ( [0] => [1] => ) [2] => Array ( [0] => [1] => )) // a is not empty
改为0
$a = array( // a is not empty array(0, 0) );
Array里只剩下空 array()! 跟Array里只剩下''
$a = array( array() ); // a is not empty $a = array( // Array([0] => ) a is not empty '' );
结论,empty是不是空的判断 在阵列中,与阵列带的值无关,只要里面有东西empty就不成立