PHP中如何将多维数组按相同元素分组为子数组集合
PHP多维数组按相同元素分组的解决方案
你可以通过分组后提取值的方式实现需求,核心是先为每个重复元素生成唯一标识作为分组键,再去掉键保留子数组集合。以下是两种可行的实现方式:
方法一:使用array_reduce
$arrays = [ ['id' => 1, 'name' => 'main'], ['id' => 1, 'name' => 'main'], ['id' => 2, 'name' => 'main'], ['id' => 1, 'name' => 'main'], ['id' => 2, 'name' => 'main'] ]; // 按元素属性分组 $grouped = array_reduce($arrays, function($carry, $item) { // 用id和name拼接生成唯一分组键,确保相同元素归为一组 $key = $item['id'] . '_' . $item['name']; if (!isset($carry[$key])) { $carry[$key] = []; } $carry[$key][] = $item; return $carry; }, []); // 去掉关联键,转为索引数组结构 $result = array_values($grouped); // 输出结果 print_r($result);
方法二:使用foreach循环(更直观)
$arrays = [ ['id' => 1, 'name' => 'main'], ['id' => 1, 'name' => 'main'], ['id' => 2, 'name' => 'main'], ['id' => 1, 'name' => 'main'], ['id' => 2, 'name' => 'main'] ]; $grouped = []; foreach ($arrays as $item) { $key = $item['id'] . '_' . $item['name']; $grouped[$key][] = $item; } $result = array_values($grouped); print_r($result);
说明
- 两种方法都通过
id和name拼接的唯一键来区分不同组,确保所有属性完全相同的元素被归为一组。 - 最后用
array_values()去掉分组时生成的关联键,得到你需要的纯索引型多维数组结构。 - 你之前尝试
array_map未成功,是因为array_map仅对单个元素做转换,无法完成需要累积状态的分组操作,array_reduce或foreach才是更合适的选择。
内容的提问来源于stack exchange,提问作者Zain Ul Abideen
相关产品推荐
相关产品推荐

