最直接可靠的方法是用 is_array() 函数,它专为判断 php 原生数组设计,对索引、关联、多维数组均返回 true,对 arrayobject、stdclass 等一律返回 false,是官方推荐且性能最优的标准判断方式。

最直接、最可靠的方法是用 is_array() 函数。它专为判断 PHP 原生数组设计,对索引数组、关联数组、多维数组都返回 true,而对 ArrayObject、stdClass 或实现了 ArrayAccess 的对象一律返回 false —— 这正是它“严格”的价值所在。
用 is_array() 做标准判断
这是官方推荐且性能最优的方式,无需额外逻辑,一行即可完成核心判断:
- 调用
is_array($var),参数为待检测变量 - 函数返回布尔值:
true表示是原生数组,false表示不是 - 可直接用于条件分支,例如:
if (is_array($data)) { /* 处理数组 */ } - 注意:它不区分一维或多维,也不关心键名是数字还是字符串,只认类型本质
用 gettype() 辅助确认类型名称
当你需要在调试或日志中明确看到“array”这个字符串标识时,可用 gettype() 配合严格比较:
- 执行
$type = gettype($var),获取变量底层类型名 - 必须用全等运算符
===比较:if ($type === 'array') - 避免用
==,防止字符串隐式转换干扰(如'array' == true会为true) - 该方式性能略低于
is_array(),适合开发期人工验证,不建议用于高频逻辑
识别“类数组对象”需额外处理
有些对象(如 ArrayObject、自定义 MyList 类)实现了 ArrayAccess 接口,能用 $obj['key'] 访问,但 is_array() 仍返回 false:
- 若业务允许“数组式行为”,可组合判断:
is_array($var) || ($var instanceof ArrayAccess) - 若需遍历能力,改用
is_iterable($var)(PHP 7.1+),它涵盖数组、Traversable 对象等 - 切勿用
$var instanceof Array—— PHP 中没有Array类,此写法会报错
慎用 count() 或 serialize() 做间接判断
这些方法有明显局限,仅作辅助参考,不可替代 is_array():
-
count($var)对字符串、null、整数等会触发警告并返回0,易误判 - 若坚持使用,务必先加保护:
is_countable($var) && is_array($var) -
serialize($var)后检查是否以'a:'开头,虽能反映序列化特征,但Serializable对象也会生成类似结构,不可靠 - 所有间接方式都应以
is_array()结果为最终依据
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











