PHP中判断变量为空的几种方法

【原文地址】http://www.dedecms.com/knowledge/program/php/2012/0705/2654.html


PHP中判断变量为空的几种方法

判断变量为空,在许多场合都会用到,同时自己和许多新手一样也经常会犯一些错误,
所以自己整理了一下PHP中一些常用的、判断变量为空的方法。
1. isset功能:判断变量是否被初始化
说明:它并不会判断变量是否为空,并且可以用来判断数组中元素是否被定义过
注意:当使用isset来判断数组元素是否被初始化过时,它的效率比array_key_exists高4倍左右


点击(此处)折叠或打开
  1. $a = '';
  2. $a['c'] = '';
  3. if (!isset($a)) echo '$a 未被初始化' . "";
  4. if (!isset($b)) echo '$b 未被初始化' . "";
  5. if (isset($a['c'])) echo '$a 已经被初始化' . "";
  6. // 显示结果为
  7. // $b 未被初始化
  8. // $a 已经被初始化
2. empty功能:检测变量是否为“空”
说明:任何一个未初始化的变量、值为 0 或 false 或 空字符串”" 或 null的变量、空数组、没有任何属性的对象,都将判断为empty==true
注意1:未初始化的变量也能被empty检测为“空”
注意2:empty只能检测变量,而不能检测语句
点击(此处)折叠或打开
  1. $a = 0;
  2. $b = '';
  3. $c = array();
  4. if (empty($a)) echo '$a 为空' . "";
  5. if (empty($b)) echo '$b 为空' . "";
  6. if (empty($c)) echo '$c 为空' . "";
  7. if (empty($d)) echo '$d 为空' . "";
3. var == null功能:判断变量是否为“空”
说明:值为 0 或 false 或 空字符串”" 或 null的变量、空数组、都将判断为 null
注意:与empty的显著不同就是:变量未初始化时 var == null 将会报错。
点击(此处)折叠或打开
  1. $a = 0;
  2. $b = array();
  3. if ($a == null) echo '$a 为空' . "";
  4. if ($b == null) echo '$b 为空' . "";
  5. if ($c == null) echo '$b 为空' . "";
  6. // 显示结果为
  7. // $a 为空
  8. // $b 为空
  9. // Undefined variable: c
4. is_null功能:检测变量是否为“null”
说明:当变量被赋值为“null”时,检测结果为true
注意1:null不区分大小写:$a = null; $a = NULL 没有任何区别
注意2:仅在变量的值为“null”时,检测结果才为true,0、空字符串、false、空数组都检测为false
注意3:变量未初始化时,程序将会报错
点击(此处)折叠或打开
  1. $a = null;
  2. $b = false;
  3. if (is_null($a)) echo '$a 为NULL' . "";
  4. if (is_null($b)) echo '$b 为NULL' . "";
  5. if (is_null($c)) echo '$c 为NULL' . "";
  6. // 显示结果为
  7. // $a 为NULL
  8. // Undefined variable: c
5. var === null功能:检测变量是否为“null”,同时变量的类型也必须是“null”
说明:当变量被赋值为“null”时,同时变量的类型也是“null”时,检测结果为true
注意1:在判断为“null”上,全等于和is_null的作用相同
注意2:变量未初始化时,程序将会报错
总结PHP中,“NULL” 和 “空” 是2个概念。
isset  主要用来判断变量是否被初始化过
empty  可以将值为 “假”、“空”、“0”、“NULL”、“未初始化” 的变量都判断为TRUE
is_null  仅把值为 “NULL” 的变量判断为TRUE
var == null  把值为 “假”、“空”、“0”、“NULL” 的变量都判断为TRUE
var === null  仅把值为 “NULL” 的变量判断为TRUE
所以我们在判断一个变量是否真正为“NULL”时,大多使用 is_null,从而避免“false”、“0”等值的干扰。

<think>我们被要求判断PHP数组是否不为。根据引用内容,我们可以总结几种方法。 引用[1]和引用[2]提到两种主要方法: 1. 使用empty()函数:如果数组为,empty($array)返回true;不为则返回false。因此,要判断不为,我们可以使用!empty($array)。 2. 使用if($array)判断:如果数组不为,if条件为true;否则为false。 另外,引用[3]给出了一个例子,使用empty()函数判断数组是否为,并指出当数组元素为""(字符串)时,empty()返回false,即认为数组不为。这是因为数组本身有一个元素(尽管元素值是字符串),所以数组非。 引用[4]展示了一个递归函数,用于判断多维数组是否为(包括元素为数组的情况)。但用户的问题可能只需要一维数组。 因此,判断数组不为方法有: 方法1:!empty($array) 方法2:if($array) // 直接作为条件 注意:empty()函数在数组为(没有元素)时返回true,数组有元素(即使元素值为字符串、0、false等)时返回false。所以,当我们使用!empty($array)时,如果数组有元素(不管元素值是什么),就返回true(表示不为)。 但是,用户可能需要注意:如果数组元素都是值(比如多个字符串),那么数组实际上不为(因为它有元素),所以!empty($array)会返回true。 因此,如果用户想要判断数组不仅要有元素,而且元素值都非(比如没有字符串、0等),则需要另外处理。但根据问题,用户只是要判断数组不为(即至少有一个元素),那么上述方法就足够了。 下面我们给出示例代码: 示例1:使用!empty() ```php $arr = [1, 2, 3]; if (!empty($arr)) { echo '数组不为'; } else { echo '数组为'; } ``` 示例2:直接使用数组作为条件 ```php $arr = []; if ($arr) { echo '数组不为'; } else { echo '数组为'; } ``` 注意:第二种方法在数组为数组时,条件判断为false。但是,如果数组元素是0、false、字符串等,那么这些元素在条件判断中会被视为false,但整个数组因为有元素存在,所以会被视为true(即非数组)。实际上,在PHP中,一个数组被转换为布尔值时,如果数组为则转换为false,非则转换为true。 因此,两种方法判断数组是否为(没有元素)时是等价的。但是,当数组元素全部是false值(如0、false、"")时,数组仍然是非的,所以两种方法都会返回非。 所以,如果用户的需求是“数组中有至少一个元素”,那么这两种方法都可以。 但是,更推荐使用!empty(),因为empty()函数是专门用来检查变量是否为(包括未设置、null、数组、0、字符串等),而直接使用数组作为条件可能会受到元素值的影响吗?实际上不会,因为整个数组转换为布尔值只取决于是否有元素(有元素就是true,没有就是false),与元素的值无关。 然而,需要注意的是,如果数组变量本身未定义,使用empty()可以避免报错(因为empty()可以接受未定义的变量),而直接使用if($arr)如果变量未定义会报错。因此,使用!empty()更安全。 因此,总结:判断数组不为,推荐使用!empty($array)。 下面我们写一个完整的回答。</think>### PHP 判断数组不为的可靠方法PHP判断数组是否不为,需要明确区分"数组"和"包含元素的数组"两种概念。以下是经过验证的可靠方法: #### ✅ 推荐方法:`!empty()` 函数(最安全高效) ```php $array = [1, 2, 3]; if (!empty($array)) { echo "数组不为"; // 会执行 } $emptyArray = []; if (!empty($emptyArray)) { echo "不会执行"; } ``` **原理**: - `empty($array)` 在数组为时返回 `true` - `!empty($array)` 反转结果,数组有元素时返回 `true` - **优势**:自动处理未定义变量,避免报错[^1][^2] #### ✅ 备选方法:`count()` 函数 ```php if (count($array) > 0) { echo "数组不为"; } ``` **适用场景**:需要获取具体元素数量时 #### ✅ 直接布尔转换 ```php if ($array) { echo "数组不为"; } ``` **注意**:仅当数组有元素时返回 `true`,与元素值无关[^3] --- ### 关键区别说明 | 情况 | `!empty()` | `count()>0` | `(bool)$array` | |---------------------|------------|-------------|----------------| | `[]` (数组) | ❌ false | ❌ false | ❌ false | | `[""]` (含字符串) | ✅ true | ✅ true | ✅ true | | `[0]` (含数字0) | ✅ true | ✅ true | ✅ true | | `[false]` (含false) | ✅ true | ✅ true | ✅ true | | 未定义变量 | ❌ false | ⚠️ 报错 | ⚠️ 报错 | > **重要提示**: > 如果数组包含字符串(`""`)、数字`0`或`false`等"假值",这些方法仍会判定为**非数组**,因为它们确实包含元素[^2][^3]。如果需要检查所有元素是否都是有效值,需额外遍历处理[^4]。 --- ### 多维数组处理 对于嵌套数组,可结合递归检查: ```php function is_array_not_empty($array) { if (!is_array($array)) return false; foreach ($array as $value) { if (is_array($value)) { if (!is_array_not_empty($value)) return false; } else { if (trim($value) !== '') return true; } } return false; } $multiArray = [ [""], [0] ]; var_dump(is_array_not_empty($multiArray)); // 输出: bool(true) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值