如何统计数组/Collection中registered='no'的元素数量,解决count报错问题
现有代码的错误点
- 循环条件错误:数组索引从0开始,
$i <= count($data['attendances'])会导致最后一次循环访问不存在的下标,触发异常 - 判断逻辑错误:
if ($data['attendances'][$i]['registered'] = 'no')用了赋值运算符=,而非比较运算符==/===,会误把所有元素的registered字段都修改为no - count调用逻辑错误:你需要统计符合条件的元素总个数,而不是对单个字符串类型的
registered字段执行count操作,字符串不支持count方法,所以触发了你遇到的报错
正确实现方案
你可以按需选择以下任意一种写法:
写法1:修改原生for循环逻辑
// 初始化计数器 $noRegisteredCount = 0; // 循环条件改成小于数组长度,避免下标越界 for ($i=0; $i < count($data['attendances']); $i++) { // 用全等判断值是否为no if ($data['attendances'][$i]['registered'] === 'no') { // 符合条件则计数器+1 $noRegisteredCount++; } } // 输出最终统计结果 echo $noRegisteredCount;
写法2:用Laravel集合方法(更简便)
从你提供的dd输出截图可以判断attendances是Laravel的Collection对象,直接用框架封装的统计方法即可,不需要手写循环:
$noRegisteredCount = $data['attendances']->where('registered', 'no')->count(); echo $noRegisteredCount;
如果attendances是普通PHP数组,也可以用array_filter实现一行统计:
$noRegisteredCount = count(array_filter($data['attendances'], function($item) { return $item['registered'] === 'no'; }));
内容的提问来源于stack exchange,提问作者Chonchol Mahmud
相关产品推荐
相关产品推荐

