用 count() 最直接判断 PHP 数组键数量,它返回存在且未被 unset 的键个数;筛选键数等于 N 的数组需用 array_filter() 配合 count($item) === N。

怎么快速判断一个 PHP 数组有多少个键
用 count() 最直接,它返回数组中元素个数(即键的数量),对索引数组和关联数组都有效。注意:它不区分键类型,只数“存在且非被 unset 的键”。
常见误判点是把 count() 和 array_keys() 混用——后者返回键名列表,再套一层 count() 是冗余操作。
筛选出键数量等于 N 的数组(如只留 3 个键的子数组)
PHP 没有内置函数直接按键数量批量筛选数组,需手动遍历 + 条件过滤。典型场景是处理一批用户数据,只保留字段数恰好为 3 的记录。
- 用
array_filter()配合匿名函数,内部调用count($item) - 若原始数据是二维数组(如
$users = [['name'=>'a','age'=>20], ['id'=>1,'city'=>'bj','role'=>'admin']]),则每个$item是一维子数组,count($item)就是它的键数 - 避免在回调里用
sizeof()—— 它只是count()的别名,语义模糊,可读性差
$filtered = array_filter($data, function($item) {
return count($item) === 3;
});
筛选键数量 ≥ 或 ≤ 某值的数组时要注意什么
比较运算符本身没问题,但容易忽略空数组、含 null 键或数字键重复的情况。PHP 中 [0 => 'a', 0 => 'b'] 实际只有 1 个键(后赋值覆盖),count() 返回 1,不是 2。
- 如果数组可能含
null值或空字符串作为键(极少但合法),count()仍会计入 - 嵌套数组不自动展开:
count([['a','b'], ['c']])返回 2,不是 5;要算总键数得递归统计 - 性能敏感场景下,避免在循环内反复调用
count()—— 可提前存到变量,尤其配合for循环时
为什么用 array_keys($arr, null, true) 不能筛键数
这个写法本身就有问题:array_keys() 第二个参数是「搜索值」,不是「键数量」,第三个参数是严格比较开关,跟键个数完全无关。有人误以为传 null 能获取所有键再计数,但这是多此一举,还可能因值为 null 的元素干扰结果。
立即学习“PHP免费学习笔记(深入)”;
真正需要的是 count($arr),不是绕路查键再数。最简路径就是最稳路径。











