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

如何对Laravel Collection按值分组并生成分隔键?

如何基于值对Laravel Collection进行分组并合并键

这问题挺常见的,咱们可以用Laravel Collection的几个方法组合起来轻松实现你的需求,核心思路是先按值分组,再将分组后的键合并成你想要的格式。

假设你的原始集合是这样的:

$collection = collect([
    'CASSETE_1' => '500',
    'CASSETE_2' => '500',
    'CASSETE_3' => '100',
    'CASSETE_4' => '100',
]);

接下来分两步处理:

  1. 按值分组:用groupBy()方法,传入值作为分组依据,这会得到一个以值为键、对应原键数组为值的新集合:
$grouped = $collection->groupBy(function ($value, $key) {
    return $value;
});
// 此时$grouped的结构是:
// Collection {
//   #items: array:2 [
//     "500" => Collection { #items: ["CASSETE_1", "CASSETE_2"] },
//     "100" => Collection { #items: ["CASSETE_3", "CASSETE_4"] }
//   ]
// }
  1. 转换键值格式:用mapWithKeys()方法,将分组后的原键数组合并成用/分隔的字符串作为新键,值保留原来的分组值:
$result = $grouped->mapWithKeys(function ($keys, $value) {
    return [
        implode(' / ', $keys->all()) => $value
    ];
});

如果你喜欢更简洁的写法,把两步合并成一行也完全没问题:

$result = $collection->groupBy(fn($v) => $v)->mapWithKeys(fn($keys, $val) => [implode(' / ', $keys) => $val]);

最终$result的结构就完全符合你的需求了:

Collection {#250 ▼
  #items: array:2 [▼
    "CASSETE_1 / CASSETE_2" => "500"
    "CASSETE_3 / CASSETE_4" => "100"
  ]
}

简单拆解下用到的方法:

  • groupBy():按指定规则(这里是元素的值)对集合进行分组
  • mapWithKeys():遍历集合并返回关联数组,用来重新定义集合的键值对
  • implode():把数组元素拼接成指定格式的字符串,这里用/作为分隔符

内容的提问来源于stack exchange,提问作者Luis felipe De jesus Munoz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:27:01