我用这种方法测试一个数组$ arr如果为空
if(!empty($arr)){ //do something }
最近,我看到有人使用另一个人:
if($arr){ //do something }
只是想知道第二种方式是测试阵列的简单方法还是存在潜在风险?
答案 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结果是一个字符串,则需要更健壮的检查。