php - 两个数组如何将每个内部对象键匹配交叉?
问题描述
我有两个数组用户和游戏
$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);
推荐阅读
- django - 如何在 django 应用程序中使文章消失
- python - 当整个图在 GPU 上运行时,Tensorflow CPU 使用率 > 100%
- mysql - Spring Boot JPA 中的 SQL View 数据不正确
- emacs - 关闭 Emacs 中的特定窗口
- java - 如何在 https 站点中查找损坏的链接并使用代理
- python - Graphviz Python 可视化执行错误
- javascript - 使用 javascript 动态创建选择输入,不显示下拉菜单
- php - 大整数在excel中以科学计数法显示
- javascript - 带有多个下拉菜单的子菜单关闭延迟
- rest - 包含地图的对象?