我用这种方式测试数组 $arr 如果为空
if(!empty($arr)){ //do something }
最近,我看到有人使用另一个类似:
if($arr){ //do something }
只是想知道第二种方法不是测试数组的简单方法还是这里有一些潜在的风险?
我用这种方式测试数组 $arr 如果为空
if(!empty($arr)){ //do something }
最近,我看到有人使用另一个类似:
if($arr){ //do something }
只是想知道第二种方法不是测试数组的简单方法还是这里有一些潜在的风险?
第二个将数组转换为布尔值。空数组被强制转换为false,其他任何东西都被转换为true。所以if($arr)和if(!empty($arr))在功能上是相同的。
一个空数组 likearray()被认为等于false。所以一个简单的if ($arr)作品非常好。
empty如果变量根本不存在,则进行相同类型的比较,但不会触发NOTICE关于缺失变量的信息。如果您确定变量存在,则$arr不应使用,因为它会抑制有价值的错误报告。empty仅empty当您真的不知道变量是否存在并且无法控制时才使用。
有关更多信息,empty请参阅PHP 的 isset 和 empty 权威指南。
第二种方式并不理想。如果您使用第二种方法并确定您正在处理一个数组(而您不是)并将其传递给 foreach 语句,您最终会遇到错误。对于您要检查的内容,它也比使用 if($arr) 进行测试更有指导意义。
我的偏好是:
if (is_array($arr) && count($arr) > 0) {
//work with array
}
编辑:我认为我的基本观点是测试数组存在的能力只是问题的一部分。如果 $arr 原来是一个字符串,则需要进行更稳健的检查。