【发布时间】:2017-02-16 14:48:47
【问题描述】:
我有类似以下的数据:
学生名单和他们就读的学校
[
{
"uid": 100,
"name": "Adam",
"school": {
"id": 1,
"name": "NYHS"
}
},
{
"uid": 101,
"name": "Bob",
"school": {
"id": 2,
"name": "PAHS"
}
},
{
"uid": 102,
"name": "Charles",
"school": {
"id": 1,
"name": "NYHS"
}
},
{
"uid": 103,
"name": "David",
"school": {
"id": 3,
"name": "MMDS"
}
}
]
我想将其转换为包含就读学生的学校列表。
[
{
"id": 1,
"name": "NYHS",
"students": [
{
"uid": 100,
"name": "Adam"
},
{
"uid": 102,
"name": "Charles"
},
]
},
"id": 2,
"name": "NYHS",
"students": [
{
"uid": 101,
"name": "Bob"
}
]
},
"id": 3,
"name": "MMDS",
"students": [
{
"uid": 103,
"name": "David"
}
]
},
]
我有它的工作版本,但它很长而且可能性能不佳。有更短/更快的方法吗?
什么语言并不重要。
尝试使用 map/reduce,我得到了独特的学校,但不知道如何将学生合并到其中。
$schools = array_reduce(
array_map(function ($a) {
return $a['school'];
}, $students),
function ($s, $i) {
if (count(array_filter($s, function ($j) use ($i) {
return $j['id'] == $i['id'];
})) == 0) {
array_push($s, $i);
}
return $s;
},
array()
);
【问题讨论】:
-
希望你使用reduce方法对数据进行分组
-
JavaScript 还是 PHP?
-
@nnnnnn 没关系。要么工作
标签: javascript php arrays algorithm