You need to enable JavaScript to run this app. PHP 如何按关联数组值提取对应键并分组
优惠活动
大模型
产品
解决方案
定价
更多

PHP 如何按关联数组值提取对应键并分组

关联数组按值分组提取对应键的实现方案

核心实现思路

你不需要在循环外通过array_count_values做多余的去重统计,只需要在遍历原关联数组时,把每个元素的键按照对应的值归入预先准备好的分组容器即可,全程无额外的重复遍历开销。


常规安全实现(推荐)

不直接生成零散的独立变量,而是用统一的多维数组承载分组结果,避免变量命名冲突、特殊值导致的报错问题,代码逻辑如下:

$products = array_combine($one_array_key, $second_array_values);

// 初始化分组容器
$grouped_by_value = [];
foreach ($products as $key => $value) {
    // 以原数组的值作为分组键,把对应原键追加到分组列表中
    $grouped_by_value[$value][] = $key;
}

运行后$grouped_by_value的结构为:

$grouped_by_value = [
    "A" => ["arn1", "arn2", "arn3"],
    "B" => ["arn4", "arn5", "arn6"]
];

需要取对应值的键列表时,直接通过数组下标访问即可,例如取A组的键用$grouped_by_value['A'],取B组用$grouped_by_value['B']。


匹配预期输出的独立变量写法

如果你确实需要生成$A、$B这类和值同名的独立变量,可以在上面的分组结果基础上,通过extract()函数把多维数组拆解为独立变量:

// 紧接上面的分组代码
extract($grouped_by_value);

执行完成后,就会自动生成符合你预期的$A、$B变量,内容和示例完全一致。

注意:如果原数组的值存在特殊字符(比如含空格、数字开头、PHP关键字),会导致生成非法变量名引发报错,这种场景下不建议使用这种写法。


现有代码的修正与优化

  • 变量拼写错误:你写的array_count_values($product) 中的$product未定义,正确变量名是$products,且这行代码本身属于多余步骤,按上面的循环逻辑可以直接省略。
  • 如果坚持要沿用"先提取去重值再初始化数组"的思路,也可以实现,但要注意变量合法性风险,示例代码如下:
    $products = array_combine($one_array_key, $second_array_values);
    $products_distinct_values = array_count_values($products);
    $distinct_value_list = array_keys($products_distinct_values);
    
    // 给每个去重值初始化空数组
    foreach ($distinct_value_list as $value) {
        ${$value} = [];
    }
    
    // 遍历填充内容
    foreach ($products as $key => $value) {
        ${$value}[] = $key;
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 06:27:06