我有类似以下数据:学生优化阵列反相
名单和学校,他们参加
[
{
"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"
}
]
},
]
我有一个工作版本,但它很长,可能不是高性能。有没有更快/更快的方法来做到这一点?
真的不管用什么语言。
试过使用的地图/减少,我得到了独特的学校,但不知道如何将学生合并到它。
$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
@nnnnnn没关系。要么工作 – YarGnawh