php 7.5 不存在,最新稳定版是 php 8.3;array_count_values() 不支持对象因仅接受 string/integer 等可哈希标量,替代方案包括用 spl_object_id() 按内存地址或自定义键(如属性组合)统计。

PHP 7.5 并不存在 —— 目前(截至 2024 年)PHP 官方最新稳定版本是 PHP 8.3,而 PHP 7 系列的最终版本是 PHP 7.4(已于 2022 年 11 月停止支持)。你提到的 array_count_values() 在 PHP 7.4 及更早版本中**不支持对象作为数组元素**,直接调用会报错:Warning: array_count_values(): Can only count string and integer values。
为什么 array_count_values() 对象报错?
array_count_values() 的设计初衷仅用于统计「可哈希的标量值」:即 string 和 integer。对象是复合类型,没有默认的字符串/整数表示,PHP 无法自动判断“两个对象是否相等”或“如何归为同一类”,因此拒绝处理。
替代方案:手动统计对象频次
要统计含对象的数组中各对象的出现次数,需先定义「对象相等性规则」,再按规则分组计数。常用做法如下:
- 用 spl_object_id() 按对象身份(内存地址)统计:适合区分不同实例(即使属性相同也视为不同)
- 用序列化或自定义键(如关键属性组合)按逻辑内容统计:适合业务上“内容相同即算重复”的场景
示例(按对象内容统计):
$arr = [$obj1, $obj2, $obj1, $obj3];
$keyed = array_map(function($o) {
return $o->id . '|' . $o->name; // 或 json_encode([$o->id, $o->name])
}, $arr);
$counts = array_count_values($keyed); // ✅ 此时元素是字符串
更健壮的通用函数封装
可封装一个支持对象的频次统计函数,接受比较回调:
function array_count_objects(array $array, callable $keyFn): array {
$keys = array_map($keyFn, $array);
return array_count_values($keys);
}
// 使用示例:按 ID 统计
$counts = array_count_objects($objects, fn($o) => $o->id);
// 按多个属性组合统计
$counts = array_count_objects($objects, fn($o) => "{$o->type}:{$o->status}");
注意:对象属性访问与空值安全
若对象属性可能为 null 或不存在,直接拼接易出错。建议:
- 使用 null 合并操作符:
$o->name ?? '' - 加 isset 判断或 try-catch(对 __get 不稳定时)
- 优先在对象内提供
getHashKey()方法统一返回统计键
不复杂但容易忽略。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











