如何在PHP中基于公共键值对对对象进行分组?

如何在PHP中基于公共键值对对对象进行分组?,php,arrays,object,grouping,Php,Arrays,Object,Grouping,我有一个包含如下对象的数组: array:113 [ 0 => App\Api\Wheel {#5809 -manufacturer: "RIAL" -colour: "diamant" -design: "aaaaaa" -surface: "ss" -diameter: 16 } 1 => App\Api\Wheel {#6201 -manufacturer: "RIAL" -colour: "diamant"

我有一个包含如下对象的数组:

array:113 [
  0 => App\Api\Wheel {#5809
    -manufacturer: "RIAL"
    -colour: "diamant"
    -design: "aaaaaa"
    -surface: "ss"
    -diameter: 16
  }
  1 => App\Api\Wheel {#6201
    -manufacturer: "RIAL"
    -colour: "diamant"
    -design: "aaaaaa"
    -surface: "ss"
    -diameter: 17
  }
在这里,根据值,我需要分组。直径将是不同的,其他的将是相同的

我的最终结果是得到相同的结构,但数组或逗号分隔字符串中的直径相同

array:113 [
    0 => App\Api\Wheel {#5809
    -manufacturer: "RIAL"
    -colour: "diamant"
    -design: "aaaaaa"
    -surface: "ss"
    -diameter: [
            16,
            17      
        ]
    }
到目前为止,我已经尝试了以下代码行

$finalResult = array();
        foreach ($records as $record) {
            if (!in_array($record->getManufacturer(), array_keys($finalResult))) {
                $finalResult[$record->getManufacturer()] = (object)array(
                    'manufacturer' => $record->getManufacturer(),
                    'colour' => $record->getColour(),
                    'design' => $record->getDesign(),
                    'surface' => $record->getSurface(),
                    'diameter' => $record->getDiameter()
                );
            } else {
                $finalResult[$record->getManufacturer()]->diameter = [$record->getDiameter()];
            }
        }
        dd(($finalResult));
但是,我不能分组或返回相同格式的结果


有人能帮我吗?

您需要更新
else
块中的代码,以处理添加另一个
直径
值的问题,目前您只是在覆盖现有值。要创建数组,请执行以下操作:

if (is_array($finalResult[$record->getManufacturer()]->diameter)) {
    $finalResult[$record->getManufacturer()]->diameter[] = $record->getDiameter();
}
else {
    $finalResult[$record->getManufacturer()]->diameter = array($finalResult[$record->getManufacturer()]->diameter, 
                                                               $record->getDiameter());
}
制作逗号分隔的列表要简单一些:

$finalResult[$record->getManufacturer()]->diameter .= ',' . $record->getDiameter();
注意

!in_array($record->getManufacturer(), array_keys($finalResult))
可以用

!isset($finalResult[$record->getManufacturer()])
这会快得多