所以这是一个非常长的解释。
我有一个反恐精英:源服务器,有一个商店的游戏内插件。该存储将其数据保存在MySQL数据库中(对于此实例,名为“store”)。商店在该数据库中跟踪玩家的钱(在表'用户'中的'信用'列中)。它基于'steam_id'(每个客户端都是唯一的)来存储客户端
'steam_id'的格式为(示例):STEAM_0:0:123456789或STEAM_0:1:12345789。
我的页面显示了数据库中的前1000名用户(按学分排序)。
我的问题:我需要将这些丑陋的steam_id转换为实际名称。
我现在的位置:
根据API文档,我在查询API时必须使用“社区ID”。如果我想获得多个用户,我可以使用逗号分隔GET字符串中的社区ID。
(http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=APIKEY&steamids=的 76561197960435530,76561197960435531 &安培;格式= JSON)
我有一个将steam_id转换为API可接受ID的函数。
function SteamID2CommunityID($steam_id){
$parts = explode(':', str_replace('STEAM_', '' ,$id));
$communityID = bcadd(bcadd('76561197960265728', $parts['1']), bcmul($parts['2'], '2'));
return $communityID;
}
有了这个,我可以用逗号分隔社区id列表:
while ($row = $mysqli->fetch_assoc($request)) {
$ids .= ',' . SteamID2CommunityID($row['steamid']) . ',';
}
现在对于棘手的部分,所有这些值都返回到一个JSON数组中。我需要添加一些东西,所以当我显示我的数据时,我可以将'steam_id'直接转换为'name'(使用现有的数组)。
输出示例(删除大多数键和值以使其可读)
Array (
[response] => Array
(
[players] => Array
(
[0] => Array
(
[steamid] => 76561198010207577
[personaname] => [rGA] Stainbow
)
[1] => Array
(
[steamid] => 76561197966653036
[personaname] => |K}{R|Mastarious(MNBH)
)
)
)
)
再说一次,我怎样才能从'steam_id'直接转到名字?
感谢任何能提供代码和/或建议的人!
答案 0 :(得分:1)
这是another Stack Overflow question的变体副本,更实用,更少本地化,但我不妨回答这个问题。
假设您的输入steam_id
为$INPUT
,并且您的最终输出数组存储在$OUTPUT
中,这是可用于转换{{foreach
的功能steam_id
方法1}}到personaname
:
/**
* Convert steam_id to personaname
* @returns STRING The name associated with the given steam_id
* BOOL FALSE if no match was found
*/
function steamID_to_name($INPUT, $OUTPUT)
{
// This gets the relevant part of the API response.
$array = $OUTPUT['response']['players'];
// Using your function to convert `steam_id` to a community ID
$community_id = SteamID2CommunityID($INPUT);
// Linear search
foreach ($array as $array_item)
{
// If a match was found...
if ($community_id == $array_item['steamid'])
// Return the name
return $array_item['personaname'];
}
// If no match was found, return FALSE.
return false;
}