【问题标题】:Any Way To Speed up this Loop?有什么方法可以加快这个循环?
【发布时间】:2026-02-07 03:00:02
【问题描述】:

有没有办法加快这个功能? 这需要太多时间,有时无法正常工作

<?php 
$json = file_get_contents('http://xxxxxxxx/players.json');
$data = json_decode($json,true);
for ($i=0; $i< count($data); $i++) 

{
    $temp = explode(":",$data[$i]['identifiers'][0]);
    $json2 = file_get_contents('http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=XXXXXXXXXXXXX&steamids=' . hexdec($temp[1]) . '');
    $data2 = json_decode($json2);
    $playerData = ''. $data2->response->players[0]->personaname . ',' . $data2->response->players[0]->avatarfull .'';
    echo($playerData);
    echo "<br>";
}
?>

【问题讨论】:

  • “有时不工作”是什么意思? “加速”现在有多快?
  • 您在每个循环中都从 API 请求数据。考虑到您正在处理 3rd 方服务,如果他们没有办法同时获得多个用户,则可能没有办法。
  • count($data)移动到循环之前并将其存储在变量中。 _n但我怀疑你是否注意到了变化
  • 从名称steamids 来看,您的蒸汽驱动的 API 调用似乎可以同时返回多个用户。你为什么一次做一个?我很惊讶你没有受到速率限制。

标签: php performance


【解决方案1】:

是的,您一次可以获取多个 ID。根据文档,您可以在用户 ID 之间使用逗号,并且一次最多可以获取 100 个。

Comma-delimited list of 64 bit Steam IDs to return profile information for. Up to 100 Steam IDs can be requested.https://developer.valvesoftware.com/wiki/Steam_Web_API#GetPlayerSummaries_.28v0002.29

在您的第一个 $json 之后,循环遍历并将标识符添加到数组中。然后使用 $json2 创建一个调用,其中您将来自 $json 的 ID 内爆,每个 ID 之间用逗号分隔。

如果您期望超过 100 个 ID,那么您将不得不拨打更多电话。

【讨论】:

    最近更新 更多