我有两个数组用户和游戏
$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"
}
],
}
],
有人帮助我
我了解,我不应该对此“非问题”提供答案。我仍然这样做,因为我认为它可能具有一定的学习价值。
想法是,不是为每个用户循环每个游戏(就像幼稚的方法一样),因为这根本无法扩展。最好使用匹配的数组并将游戏排序到其中:
//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);
$users = [
[
"name" => "jone",
"id" => "100"
],
[
"name" => "Peters",
"id" => "200"
]
];
$games = [
[
"name" => "tennis",
"level" => "05",
"user_id" => "100"
],
[
"name" => "football",
"level" => "03",
"user_id" => "100"
],
[
"name" => "football",
"level" => "05",
"user_id" => "200"
]
];
foreach ($users as $ukey => $user) {
foreach ($games as $game) {
if ($game["user_id"] === $user["id"]) {
$users[$ukey]["game"][] = $game;
}
}
}
echo "<pre>";
print_r($users);
die;
尝试一下。它应该工作。
foreach($user as $k => $val){
foreach($game as $gk => $gval){
if($val['id'] == $gval['user_id']){
$user[$k]['game'][] = $gval;
}
}
}
echo json_encode($user);
OUTPUT
[
{
"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"
}
]
}
]