0

我用这种方式测试数组 $arr 如果为空

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

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

if($arr){ //do something }

只是想知道第二种方法不是测试数组的简单方法还是这里有一些潜在的风险?

4

4 回答 4

3

第二个将数组转换为布尔值。空数组被强制转换为false,其他任何东西都被转换为true。所以if($arr)if(!empty($arr))在功能上是相同的。

于 2012-04-24T02:45:36.670 回答
3

一个空数组 likearray()被认为等于false。所以一个简单的if ($arr)作品非常好。

empty如果变量根本不存在,则进行相同类型的比较,但不会触发NOTICE关于缺失变量的信息。如果您确定变量存在,则$arr不应使用,因为它会抑制有价值的错误报告。emptyempty当您真的不知道变量是否存在并且无法控制时才使用。

有关更多信息,empty请参阅PHP 的 isset 和 empty 权威指南

于 2012-04-24T02:47:31.400 回答
1

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

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

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

于 2012-04-24T02:46:09.903 回答
0

第二种方式并不理想。如果您使用第二种方法并确定您正在处理一个数组(而您不是)并将其传递给 foreach 语句,您最终会遇到错误。对于您要检查的内容,它也比使用 if($arr) 进行测试更有指导意义。

我的偏好是:

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

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

于 2012-04-24T02:45:45.097 回答