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

PHP关联数组按值统计数量并提取对应键的实现咨询

实现代码

你可以直接用PHP原生数组函数组合实现,无需额外依赖,完整可运行示例如下:

<?php
// 原始数组
$array = [
    1 => 'test',
    2 => 'test',
    3 => 'test',
    4 => 'another'
];

// 场景1:单独查询指定值的统计和键获取
$targetValue = 'test';
// 统计指定值出现次数
$count = count(array_keys($array, $targetValue));
// 获取指定值对应的所有数组键
$keysOfThatValue = array_keys($array, $targetValue);
if ($count > 1) {
    // 此处替换为你需要的自定义操作,示例为输出
    var_dump($keysOfThatValue);
}

// 场景2:按值全部分组后批量处理每组
// 单次遍历生成按值分组的结果,键为原数组值,值为对应所有键的集合
$grouped = [];
foreach ($array as $key => $value) {
    $grouped[$value][] = $key;
}
// 遍历每组执行逻辑
foreach ($grouped as $currentValue => $keys) {
    $currentCount = count($keys);
    if ($currentCount > 1) {
        echo "值为 {$currentValue} 的出现次数为 {$currentCount},对应的键为:";
        var_dump($keys);
        // 此处替换为你需要的自定义操作
    }
}
?>

补充说明

  • 统计次数和获取对应键复用array_keys的结果,避免重复遍历数组,性能更优。如果需要强类型匹配值,可以给array_keys传第三个参数true。
  • 你可以根据业务需要把逻辑封装成函数,示例封装如下:
function handleArrayByValue(array $array, string $targetValue = null) {
    // 不传指定值则处理全部分组
    if (is_null($targetValue)) {
        $grouped = [];
        foreach ($array as $key => $value) {
            $grouped[$value][] = $key;
        }
        foreach ($grouped as $value => $keys) {
            if (count($keys) > 1) {
                // 自定义操作
                var_dump($value, $keys);
            }
        }
        return;
    }
    // 传指定值则仅处理对应值的逻辑
    $keys = array_keys($array, $targetValue);
    if (count($keys) > 1) {
        var_dump($keys);
    }
}

// 调用示例:仅处理值为test的逻辑
handleArrayByValue($array, 'test');
// 调用示例:处理全部分组的逻辑
handleArrayByValue($array);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:27:02