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

如何统计PHP二维数组中重复子数组的出现次数

统计PHP二维数组子数组出现次数的正确实现

你的代码无法得到预期结果的核心原因是:PHP数组的键仅支持整数或字符串类型,直接将子数组作为$count_array的键时,PHP会自动把数组转换为字符串"Array",导致所有子数组被识别为同一个键,无法区分计数。

解决方案

需要将每个子数组转换为唯一的字符串标识作为数组键,以下是两种常用实现方式:

方式1:拼接子数组元素(适合元素为字符串/数字的场景)

这种方式简单高效,适合子数组元素都是基础类型的情况:

$array = [[121,159,196],[121,159,196],[121,159,196],[121,159,196],[120,158,195],[119,157,194],[118,156,193],[117,155,192],[119,157,194],[118,156,193],[119,157,194],[121,159,196],[122,160,197],[122,160,197],[123,161,198],[124,162,199],[121,159,196],[122,160,197],[122,160,197],[123,161,198],[123,161,198],[123,161,198],[122,160,197],[122,160,197],[121,159,196],[121,159,196],[121,159,196],[121,159,196],[120,158,195],[120,158,195],[120,158,195],[120,158,195],[117,157,193],[118,158,194],[119,159,195],[119,159,195],[119,159,195],[119,159,195],[120,160,196],[121,161,197],[118,158,194],[118,158,194],[118,158,194],[119,159,195],[120,160,196],[121,161,197],[121,161,197],[120,160,196],[118,158,194],[118,158,194],[118,158,194],[117,157,193],[117,157,193],[117,157,193],[116,156,192],[116,156,192],[117,157,193],[117,157,193],[116,156,192],[117,157,193],[117,157,193],[118,158,194],[120,160,196],[120,160,196],[121,159,196],[121,159,196],[120,158,195],[120,158,195],[120,158,195],[119,157,194],[119,157,194],[119,157,194],[121,159,196],[120,158,195],[119,157,194],[118,156,193],[118,156,193],[119,157,194],[120,158,195],[121,159,196],[121,157,193],[121,157,193],[121,157,193],[121,157,193],[120,156,192],[120,156,192],[120,156,192],[120,156,192],[120,156,192],[121,157,193],[121,157,193],[122,158,194],[122,158,194],[121,157,193],[121,157,193],[120,156,192],[120,156,192],[120,156,192],[121,157,193],[121,157,193],[121,157,193],[121,157,193],[120,156,192],[120,156,192],[121,157,193],[122,158,194],[120,156,192],[120,156,192],[120,156,192],[119,155,191],[120,156,192],[119,155,191],[120,156,192],[121,157,193],[121,157,193],[120,156,192],[120,156,192],[120,156,192],[120,156,192],[119,155,191],[123,159,195],[123,159,195]];
$count_array = [];

foreach($array as $item){
    // 将子数组元素用逗号拼接成唯一字符串
    $key = implode(',', $item);
    $count_array[$key] = isset($count_array[$key]) ? $count_array[$key] + 1 : 1;
}

// 按预期格式输出结果
foreach($count_array as $key => $count){
    echo "[" . $key . "] = " . $count . "\n";
}

方式2:序列化子数组(适合任意类型元素的场景)

如果子数组包含对象、嵌套数组等复杂类型,推荐使用serialize()生成唯一标识:

$array = [[121,159,196],[121,159,196],[121,159,196],[121,159,196],[120,158,195],[119,157,194],[118,156,193],[117,155,192],[119,157,194],[118,156,193],[119,157,194],[121,159,196],[122,160,197],[122,160,197],[123,161,198],[124,162,199],[121,159,196],[122,160,197],[122,160,197],[123,161,198],[123,161,198],[123,161,198],[122,160,197],[122,160,197],[121,159,196],[121,159,196],[121,159,196],[121,159,196],[120,158,195],[120,158,195],[120,158,195],[120,158,195],[117,157,193],[118,158,194],[119,159,195],[119,159,195],[119,159,195],[119,159,195],[120,160,196],[121,161,197],[118,158,194],[118,158,194],[118,158,194],[119,159,195],[120,160,196],[121,161,197],[121,161,197],[120,160,196],[118,158,194],[118,158,194],[118,158,194],[117,157,193],[117,157,193],[117,157,193],[116,156,192],[116,156,192],[117,157,193],[117,157,193],[116,156,192],[117,157,193],[117,157,193],[118,158,194],[120,160,196],[120,160,196],[121,159,196],[121,159,196],[120,158,195],[120,158,195],[120,158,195],[119,157,194],[119,157,194],[119,157,194],[121,159,196],[120,158,195],[119,157,194],[118,156,193],[118,156,193],[119,157,194],[120,158,195],[121,159,196],[121,157,193],[121,157,193],[121,157,193],[121,157,193],[120,156,192],[120,156,192],[120,156,192],[120,156,192],[120,156,192],[121,157,193],[121,157,193],[122,158,194],[122,158,194],[121,157,193],[121,157,193],[120,156,192],[120,156,192],[120,156,192],[121,157,193],[121,157,193],[121,157,193],[121,157,193],[120,156,192],[120,156,192],[121,157,193],[122,158,194],[120,156,192],[120,156,192],[120,156,192],[119,155,191],[120,156,192],[119,155,191],[120,156,192],[121,157,193],[121,157,193],[120,156,192],[120,156,192],[120,156,192],[120,156,192],[119,155,191],[123,159,195],[123,159,195]];
$count_array = [];

foreach($array as $item){
    // 序列化子数组生成唯一键
    $key = serialize($item);
    $count_array[$key] = isset($count_array[$key]) ? $count_array[$key] + 1 : 1;
}

// 输出时反序列化还原子数组并格式化
foreach($count_array as $key => $count){
    $subArray = unserialize($key);
    echo "[" . implode(',', $subArray) . "] = " . $count . "\n";
}

输出示例

执行上述代码后,会得到符合预期的输出,例如:

[121,159,196] = 12
[120,158,195] = 8
[119,157,194] = 7
[118,156,193] = 4
...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 16:48:25