如何将查询得到的一维数组转换为以gameid为键的多维数组?
两种方式实现你要的数组结构:重组现有数组 or 直接数据库分组
一、PHP代码重组已有的原始数组
如果你已经拿到了查询返回的原始数组,直接用循环遍历就能把它转成你想要的结构,代码简单易懂:
// 原始数组 $originalArray = [ ['UID' => 1, 'gameid' => 334613], ['UID' => 2, 'gameid' => 704234], ['UID' => 3, 'gameid' => 704234] ]; // 初始化目标数组 $targetArray = []; // 遍历重组 foreach ($originalArray as $item) { $gameId = $item['gameid']; $uid = $item['UID']; // 如果该gameid还没在目标数组里,先初始化一个空数组 if (!isset($targetArray[$gameId])) { $targetArray[$gameId] = []; } // 把UID追加到对应gameid的数组里 $targetArray[$gameId][] = $uid; } // 打印查看结果 print_r($targetArray);
运行这段代码后,就能得到你想要的以gameid为键、对应UID数组为值的结构。
二、直接从数据库查询获取分组结果(更高效)
其实没必要先查出来再重组,咱可以直接在数据库查询阶段就完成分组,省掉后续的代码处理步骤。这里以MySQL为例:
1. 编写分组查询的SQL语句
SELECT gameid, GROUP_CONCAT(UID SEPARATOR ',') AS uids FROM your_table_name GROUP BY gameid;
这个SQL会按gameid分组,把每个组里的UID用逗号拼接成字符串。
2. PHP里把查询结果转成目标数组
拿到查询结果后,只需要把拼接的UID字符串转成数组就行:
// 假设$db是你的数据库连接对象,执行查询 $result = $db->query("SELECT gameid, GROUP_CONCAT(UID SEPARATOR ',') AS uids FROM your_table_name GROUP BY gameid"); $targetArray = []; while ($row = $result->fetch_assoc()) { // 把逗号分隔的字符串转成UID数组 $targetArray[$row['gameid']] = explode(',', $row['uids']); } print_r($targetArray);
这样一步到位,直接拿到你想要的数组结构,效率还更高~
内容的提问来源于stack exchange,提问作者Ialon131
相关产品推荐
相关产品推荐

