You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

array_count_values函数报错求助:PHP数组$emp值统计问题

解决array_count_values()类型错误的问题

这个问题我之前也碰到过!array_count_values()确实有个严格的限制——它只能统计**字符串(string)和整数(integer)**类型的值,你的$emp数组里肯定混了其他类型的元素(比如嵌套数组、null、布尔值或者对象),所以才会弹出那个错误提示。下面根据不同的场景给你对应的解决办法:

场景1:$emp是嵌套数组(每个元素是包含hadir字段的数组)

如果你的$emp结构是类似这样的:

$emp = [
    ['hadir' => 0],
    ['hadir' => 0],
    ['hadir' => 1],
    ['hadir' => 2],
];

你需要先提取所有hadir字段的值,再用array_count_values()统计:

// 提取所有hadir字段的值
$hadir_values = array_column($emp, 'hadir');
// 统计各值出现的次数
$counts = array_count_values($hadir_values);

// 格式化输出你要的结果
foreach ($counts as $key => $value) {
    echo "hadir $key = $value\n";
}

运行后就能得到你想要的:

hadir 0 = 2
hadir 1 = 1
hadir 2 = 1

场景2:$emp包含非int/string类型的元素(比如null、float、bool)

如果数组里有null、布尔值或者浮点数这类不符合要求的类型,你需要先标准化元素类型,再过滤无效值:

// 标准化类型:转换为int,同时处理null(这里选择排除null,你可以根据需求调整)
$normalized_values = array_map(function($val) {
    if ($val === null) {
        return null;
    }
    // 把布尔值、浮点数转为整数
    return (int)$val;
}, $emp);

// 过滤掉null值
$filtered_values = array_filter($normalized_values, function($val) {
    return $val !== null;
});

// 统计次数
$counts = array_count_values($filtered_values);

场景3:$emp的元素是对象(每个对象有hadir属性)

如果$emp里是对象实例,每个对象有hadir属性,就用array_map提取属性值:

// 提取对象的hadir属性
$hadir_values = array_map(function($obj) {
    return $obj->hadir;
}, $emp);

// 统计次数
$counts = array_count_values($hadir_values);

核心思路就是:先把$emp里的元素统一转换成整数或字符串类型,再交给array_count_values()处理,就能避开类型错误啦!

内容的提问来源于stack exchange,提问作者user7474611

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:23:47