php判断一个数组为空if(!array())好,还是if(empty(array()))?
php判断一个数组为空if(!array())好,还是if(empty(array()))?
回复内容:
php判断一个数组为空if(!array())好,还是if(empty(array()))?
首先习惯性地,RTFM
没有好不好,只有合适不合适
!
和empty()
行为有什么区别?
!
相当于转换为布尔值后取反,结果可以参照手册的布尔值转换部分empty
行为同样见手册
他们的行为有3个差异
空SimpleXML (经过实验,发现这是文档问题,php5.1后,两者行为是一致的)
未定义的变量 (
!$undefined
会产生error,empty($undefined)
则返回true) 和isset
类似,这个特性对于访问复杂结构的数组或对象成员的时候特别友好(empty($arr['userModel']->userFriends)
)php5.5之前,
empty
只接受变量,不接受表达式(比如函数的返回结果empty(getSomething())
)
评论里也有人说了,因为empty是语言结构,并没有函数调用的巨大开销,所以两者的性能的差异不会太大,另外现代PHP对于这种小的开销也已经优化地很好了,所以这里不怎么需要考虑性能。结合上面的分析来说,empty
是优于!
的,除非你的php版本比较老,而又需要对表达式直接判断,不希望多加一个变量
但是,如果你并不知道你手里的东西是不是数组,建议参考 @dreamans 的答案,考虑$arr
并非数组的场景做合适的处理。
因为is_array
并不具有empty
的耐受未定义的特性,我推荐这种写法empty($arr) && is_array($arr)
能够严谨地支持各种场景
if(empty($undefined) && is_array($undefined));//未定义变量 if(empty($arr['userModel']->userFriends) && is_array($arr['userModel']->userFriends));//(潜在)未定义成员 //或者反向场景,判断有内容数组,结合表达式的能力 if(!empty($things = getSomething()) && is_array($things));
当然,更好的风格是用typehinting代替is_array
,一定是array且一定定义过,情况好得多
关于官方手册中empty行为描述的不完整,已经补充评论了,各位有空帮忙upvote
if (count($arr)) { // 数组不为空 }
效果完全一样
写代码要严谨:
<code>if(is_array($arr) && !$arr) { do something }</code>
答案写到评论里面了。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

CakePHP 是 PHP 的开源框架。它的目的是使应用程序的开发、部署和维护变得更加容易。 CakePHP 基于类似 MVC 的架构,功能强大且易于掌握。模型、视图和控制器 gu

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写
