如何在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()])
这会快得多