在if语句中测试数组是空的

时间:2012-04-24 02:41:20

标签: php arrays if-statement

我用这种方法测试一个数组$ arr如果为空

if(!empty($arr)){ //do something }

最近,我看到有人使用另一个人:

if($arr){ //do something }

只是想知道第二种方式是测试阵列的简单方法还是存在潜在风险?

4 个答案:

答案 0 :(得分:3)

第二个将数组转换为布尔值。空数组将转换为false,其他任何内容都转换为true。因此if($arr)if(!empty($arr))在功能上完全相同。

答案 1 :(得分:3)

array()之类的空数组被视为等于false。所以一个简单的if ($arr)非常适合。

empty执行相同类型的比较,但如果变量NOTICE根本不存在,则不会触发有关缺失变量的$arr。如果您确定该变量存在,则不应使用empty,因为它会抑制有价值的错误报告。如果你真的不知道某个变量是否存在而且无法控制它,那么只能使用empty

有关empty的详细信息,请参阅The Definitive Guide To PHP's isset And empty

答案 2 :(得分:1)

两种方法在功能上都是等效的。 empty()的文档提到以下内容被认为是空的

"", 0, 0.0, "0", NULL, FALSE, array(), var $var; 

看一下casting to a bool,我们可以看到列表与列表匹配,这意味着两种方法都以相同的方式处理不同的类型。

答案 3 :(得分:0)

第二种方式并不理想。如果您使用第二种方法并确定您正在处理数组(并且您没有)并将其传递给foreach语句,则最终会出现错误。除了使用if($ arr)进行测试外,它对于检查的内容更有启发性。

我的偏好是:

if (is_array($arr) && count($arr) > 0) {
    //work with array
}

编辑:我认为我的基本观点是测试数组存在的能力只是问题的一部分。如果$ arr结果是一个字符串,则需要更健壮的检查。