php - 如何根据 PHP 中的公共键值对对对象进行分组?
问题描述
我有一个包含如下对象的数组:
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
块中的代码以处理添加另一个diameter
值,目前您只是覆盖现有值。要制作一个数组,如下所示:
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()])
这会快得多。
推荐阅读
- c# - 如何创建状态图
- asp.net-core - 在 Entity Framework Core 中为多个上下文生成脚本,带有数据库引用
- cross-compiling - Bazel 对来自 cc_library 的 genrule 的依赖没有建立
- angular - localStorage.getItem('user') 为空
- java - 调试 gradle bootRun 有 server=n
- sql - 使用 postgres 表中另一列的值更新列
- azure - Azure 函数调用外部 REST API,4 分钟后出现 504 服务器错误
- javascript - 在脚本控制下的 Google Docs 中,插入表格后自动插入的段落可以通过编程方式解决吗?
- html - 显示微调器,直到从 HTTP 请求自动完成字段加载结果
- docker - docker rebase 一个层到一个新的图像?