gpt4 book ai didi

PHP根据特定数组键合并数组

转载 作者:行者123 更新时间:2023-12-04 05:45:43 25 4
gpt4 key购买 nike

我有 2 个数组,我想根据数组 1 中的键值进行合并。在下面的示例中,我希望根据 games_list 中的键 (id) 将 game_modes 放入 games_list。

从一张满是游戏的表中取出的数组 1:

$games_list = array(
0 => array(
'id' => 23,
'name' => 'Call of Duty: Modern Warfare 3'
),
2 => array(
'id' => 1,
'name' => 'Call of Duty: Black Ops'
)
);

从一个充满游戏模式的表格中提取的数组 2:
$game_modes = array(
0 => array(
'id' => 1,
'game_id' => 1,
'description' => 'Capture the Flag'
),
1 => array(
'id' => 2,
'game_id' => 1,
'description => 'Domination'
),

2 => array(
'id' => 3,
'game_id' => 23,
'description' => 'Kill Confirmed'
)
);

我希望结果是:
$games_list = array(
0 => array(
'id' => 23,
'name' => 'Call of Duty: Modern Warfare 3'
'modes' => array(
array(
'id' => 3,
'game_id' => 23,
'description' => 'Kill Confirmed'
)
)
),
2 => array(
'id' => 1,
'name' => 'Call of Duty: Black Ops'
'modes'=> array(
0 => array(
'id' => 1,
'game_id' => 1,
'description' => 'Capture the Flag'
),
1 => array(
'id' => 2,
'game_id' => 1,
'description => 'Domination'
)
)
)
);

附加信息,我正在工作的网站目前在其数据库中有 71 款游戏,每个游戏都可以有任意数量的游戏模式。

现在,我可以轻松地做一堆 for 循环并一起避免这个问题。截至目前,我没有将大量游戏模式输入数据库,但我一直在添加更多游戏模式。随着时间的推移,一直进行指数级更多的循环最终会使页面加载速度变得缓慢。

我花时间将这些数据放入 memcache 中,以便在以后的调用中更快地避免循环。

我对 array_map 从来都不擅长,因为我不太明白它是如何工作的,或者它是否是正确的路线。

最佳答案

您不认为查询级解决方案会更好吗?
漫长的道路是:

// array:  $game_modes;
// array: $game_lists;

foreach ($game_modes as $gm=>$modes){
if (isset($modes['game_id'])){
foreach ($game_lists as $gl=>$lists){
if ($lists['id'] == $modes['game_id']){
$game_lists[$gl]['modes'][] = $modes;
//break;
}
}
}
}

输出类别:摘要
$query = 'SELECT 
g.id, g.name_name,
group_concat(gm.description) as descriptions
FROM games as g
LEFT JOIN games_modes as gm
ON g.id = gm.game_id
GROUP BY g.id';

结果:
  id |  name                     |  descriptions
------------------------------------------------------------
1 | Call of Duty: Black Ops | Capture the Flag, Domination

输出类别:详细信息
$query = 'SELECT 
g.id, g.name_name,
gm.id, gm.description
FROM games as g
LEFT JOIN games_modes as gm
ON g.id = gm.game_id
ORDER BY g.id';

结果:
  id |  name                     |  id   |  description
----- --------------------------- ------- ------------------
1 | Call of Duty: Black Ops | 1 | Capture the Flag
1 | Call of Duty: Black Ops | 2 | Domination

关于PHP根据特定数组键合并数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10712814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com