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
相关产品推荐
相关产品推荐

