php - 根据共同值制作数组
问题描述
我有一个具有以下结构的数组。它有一些重复的值,我需要根据正确的制造商和型号对其进行排序。
2 => array:3 [
"id_111" => "ALFA ROMEO"
"id_112" => "4C"
"id_8702" => "P"
]
3 => array:3 [
"id_111" => "ALFA ROMEO"
"id_112" => "GIULIA"
"id_8702" => "D"
]
4 => array:3 [
"id_111" => "ALFA ROMEO"
"id_112" => "GIULIA"
"id_8702" => "U"
]
5 => array:3 [
"id_111" => "ALFA ROMEO"
"id_112" => "GIULIETTA"
"id_8702" => "D"
]
6 => array:3 [
"id_111" => "ALFA ROMEO"
"id_112" => "GIULIETTA"
"id_8702" => "U"
]
7 => array:3 [
"id_111" => "ALFA ROMEO"
"id_112" => "STELVIO"
"id_8702" => "D"
]
从这个查询中,我必须使结构化数组如下所示:
manufacturers: [
0: {
name: "ALFA ROMEO",
models: [
0: {
name: "4C",
ids: [
0: { name: "p" }
]
},
1: {
name: "GIULIA",
ids: [
0: {name: "D"},
1: {name: "U"}
]
},
2: {
name: "GIULIETTA",
ids: [
0: {name: "U"},
1: {name: "D"}
]
}
]
}
1: {}
]
到目前为止,我已经尝试过以下代码。但出于某种原因,我有点迷路了。
$data = array();
foreach ($records as $record) {
$id1 = $record["id_111"];
$data["manufacturer"] = array();
if (!in_array("id1", $data["manufacturer"])) {
$data["manufacturer"] = array(
"name" => $id1
);
}
$id2 = $record["id_112"];
$data["manufacturer"][] = array("name" => $id2);
}
任何人都可以帮助我。谢谢你。
解决方案
定义一个 groupBy 函数:
function groupBy($items, $key)
{
$array = array();
foreach($items as $item) {
foreach($item as $k => $v) {
if($key == $k) $array[$v] []= $item;
}
}
return $array;
}
进而
$names = groupBy($records, 'id_111');
$name_array = [];
foreach($names as $name => $name_items) {
$models = groupBy($name_items, 'id_112');
$model_array = [];
foreach($models as $model => $model_items) {
$ids = array_map(function($item) {
return ['name' => $item['id_8702']];
},$model_items);
$model_array []= ['name' => $model, 'ids' => $ids];
}
$name_array []= ['name' => $name, 'models' => $model_array];
}
$results = ['manufacturers' => $name_array];
推荐阅读
- mysql - 在 MySQL 中选择最后一个重复行
- android - Android Kotlin:没有为 EditText 触发 onTextChanged
- sql - 通过SAS(SQL Explicit Passthrough)连接Teradata,拉取数据,是否推荐使用execute语句?
- node.js - 在 Node.js 中,为什么我无法将类别的 id 放入嵌套结构中?
- post - Post Https SOAP 请求,用于使用机器人框架在应用程序中执行操作
- google-apps-script - 打印后更改 Sheet 的颜色
- spring - 如何在 Zuul 中获取响应体?
- html - CSS:当 div 的 css 属性改变时播放动画
- android - Android下OKHttp获取http transferStart时间和transferDone tiem
- c# - 每当我在 IIS 服务器中发布代码时都没有打印输出