两个数组如何合并每个内部对象键都匹配它交叉?
how can two array marge each inside object key are matching it Cross?
我有两个数组用户和游戏
$user =[
{
"name": "jone",
"id": "100"
},
{
"name": "Peters",
"id": "200"
}
]
$game = [
{
"name": "tennis",
"level": "05",
"user_id": "100"
},
{
"name": "football",
"level": "03",
"user_id": "100"
},
{
"name": "football",
"level": "05",
"user_id": "200"
}
]
我想使用 PHP / Laravel
得到这样的结果
$user = [
{
"name": "jone",
"id": "100"
"game": [
{
"name": "tennis",
"level": "05",
"user_id": "100"
},
{
"name": "football",
"level": "03",
"user_id": "100"
}
],
},
{
"name": "Peters",
"id": "200"
"game": [
{
"name": "football",
"level": "05",
"user_id": "200"
}
],
}
],
谁帮帮我
我明白我不应该回答这个 "non-question"。我仍然这样做,因为我认为它可能具有一些学习价值。
想法是,不是为每个用户循环每个游戏(就像天真的方法那样),因为这根本无法扩展。最好使用匹配数组,然后将游戏排序到其中:
//Prepare matching array
$user_games=array();
foreach ($user as $u) {
$u['game']=array();
$user_games[$u['id']]=$u;
}
//Sort games into matching array
foreach ($game as $g) {
$user_games[$g['user_id']]['game'][]=$g;
}
这样一个新游戏不会创建n个循环(n是用户数),而只会创建一个。
print_r($user_games);
创建所需的输出。如果用户 ID 作为索引有问题,只需使用
print_r(array_values($user_games);
我有两个数组用户和游戏
$user =[
{
"name": "jone",
"id": "100"
},
{
"name": "Peters",
"id": "200"
}
]
$game = [
{
"name": "tennis",
"level": "05",
"user_id": "100"
},
{
"name": "football",
"level": "03",
"user_id": "100"
},
{
"name": "football",
"level": "05",
"user_id": "200"
}
]
我想使用 PHP / Laravel
得到这样的结果$user = [
{
"name": "jone",
"id": "100"
"game": [
{
"name": "tennis",
"level": "05",
"user_id": "100"
},
{
"name": "football",
"level": "03",
"user_id": "100"
}
],
},
{
"name": "Peters",
"id": "200"
"game": [
{
"name": "football",
"level": "05",
"user_id": "200"
}
],
}
],
谁帮帮我
我明白我不应该回答这个 "non-question"。我仍然这样做,因为我认为它可能具有一些学习价值。
想法是,不是为每个用户循环每个游戏(就像天真的方法那样),因为这根本无法扩展。最好使用匹配数组,然后将游戏排序到其中:
//Prepare matching array
$user_games=array();
foreach ($user as $u) {
$u['game']=array();
$user_games[$u['id']]=$u;
}
//Sort games into matching array
foreach ($game as $g) {
$user_games[$g['user_id']]['game'][]=$g;
}
这样一个新游戏不会创建n个循环(n是用户数),而只会创建一个。
print_r($user_games);
创建所需的输出。如果用户 ID 作为索引有问题,只需使用
print_r(array_values($user_games);