【问题标题】:Steam Web API CondensingSteam Web API 浓缩
【发布时间】:2013-09-23 00:04:05
【问题描述】:

我四处寻找这个问题的答案,但找不到任何东西,正在向你们这些了不起的人寻求帮助。我一直在为我的网站玩弄 Steam Web API。我找到了这段代码并正在使用它。另外,我对steam api几乎没有任何经验,我的大部分经验都是在C中。无论如何,这里是代码:

[insert_php]
$api = "http://api.steampowered.com/IEconItems_440/GetPlayerItems/v0001/?key=MyApiKey&steamid=MySteamId&format=json";
$json = (file_get_contents($api));
$schema = json_decode($json);   
print var_dump($schema); 
[/insert_php]

我正在使用一个插件并将这个 php 插入到我的 WordPress 页面中。这段代码进入我的蒸汽背包,并为我提供了一个复杂列表中的所有项目。我需要帮助的是压缩它以便于阅读。库存项目的一个定义特征是定义索引。我想要做的是拥有它,因此如果它找到一定数量的具有相同定义索引的项目,它将像这样将这个数量返回到我的页面中:Scrap Metal = # of Defindexes of Scrap Metal found。我希望这足够清楚,并且有一个答案。谢谢。

我现在返回的部分代码:

{
                "id": 1828947688,
                "original_id": 1176490973,
                "defindex": 5009,
                "level": 1,
                "quality": 6,
                "inventory": 2147483650,
                "quantity": 1,
                "origin": 4
            },
            {
                "id": 1828947700,
                "original_id": 1176491289,
                "defindex": 5009,
                "level": 1,
                "quality": 6,
                "inventory": 2147483651,
                "quantity": 1,
                "origin": 4
            },
            {
                "id": 1828947742,
                "original_id": 1178541917,
                "defindex": 5009,
                "level": 1,
                "quality": 6,
                "inventory": 2147483652,
                "quantity": 1,
                "origin": 4
            },
            {
                "id": 1828947755,
                "original_id": 1178542060,
                "defindex": 5009,
                "level": 1,
                "quality": 6,
                "inventory": 2147483757,
                "quantity": 1,
                "origin": 4
            },
            {
                "id": 1828947766,
                "original_id": 1179066746,
                "defindex": 5005,
                "level": 1,
                "quality": 6,
                "inventory": 2147483653,
                "quantity": 1,
                "origin": 4
            },
            {
                "id": 1828947780,
                "original_id": 1181421843,
                "defindex": 5009,
                "level": 1,
                "quality": 6,
                "inventory": 2147483756,
                "quantity": 1,
                "origin": 4
            },
            {
                "id": 1828947788,
                "original_id": 1181426745,
                "defindex": 5006,
                "level": 1,
                "quality": 6,
                "inventory": 2147483654,
                "quantity": 1,
                "origin": 4
            },
            {
                "id": 1828947793,
                "original_id": 1187413384,
                "defindex": 5007,
                "level": 1,
                "quality": 6,
                "inventory": 2147483755,
                "quantity": 1,
                "origin": 4
            },
            {
                "id": 1828947796,
                "original_id": 1187413535,
                "defindex": 5007,
                "level": 1,
                "quality": 6,
                "inventory": 2147483655,
                "quantity": 1,
                "origin": 4
            },
            {
                "id": 1828947801,
                "original_id": 1187416362,
                "defindex": 5007,
                "level": 1,
                "quality": 6,
                "inventory": 2147483754,
                "quantity": 1,
                "origin": 4
            },
            {
                "id": 1828947810,
                "original_id": 1190342559,
                "defindex": 5013,
                "level": 1,
                "quality": 6,
                "inventory": 2147483656,
                "quantity": 1,
                "origin": 4
            },
            {
                "id": 1828947826,
                "original_id": 1190342965,
                "defindex": 5013,
                "level": 1,
                "quality": 6,
                "inventory": 2147483753,
                "quantity": 1,
                "origin": 4
            },
            {
                "id": 1828947835,
                "original_id": 1243518373,
                "defindex": 5011,
                "level": 1,
                "quality": 6,
                "inventory": 2147483657,
                "quantity": 1,
                "origin": 4
            }
ETC.

【问题讨论】:

    标签: php steam-web-api


    【解决方案1】:

    您需要遍历结果中的每个项目 $schema 并搜索您要查找的定义索引。

    例如,如果您想计算所有金属,您将寻找500050015002

    $metal_array = array(5000, 5001, 5002);
    foreach ($schema as $item)
    {
        if (in_array($metal_array, $item->defindex)
        {
            // Do something for the $item. Presumably, you'll add these up 
            // So that you can get a total metal count (remember that refined is worth 9 scrap  
            // and reclaimed is worth 3)
        }
    }
    

    编辑

    回答您评论中的一些问题:

    $item->defindex 指的是架构中当前$item 对象的defindex。您正在这个 foreach 循环中执行 object iteration。每个item 都在foreach 循环中被迭代。因此,在第一次通过循环时,$item 将如下所示:

            {
                "id": 1828947688,
                "original_id": 1176490973,
                "defindex": 5009,
                "level": 1,
                "quality": 6,
                "inventory": 2147483650,
                "quantity": 1,
                "origin": 4
            }
    

    您可以通过执行$item->ATTRIBUTENAME(即$item->quality$item->origin)来访问这些值中的任何一个。在此循环中,它将检查等于 5009$item->defindex 是否在包含 50005001, and5002 的 $metal_array 中。它没有,所以 if 块不会执行。

    至于你会在那个循环中做什么,我可能会稍微修改一下代码来做这样的事情:

    $metal_array = array(5000, 5001, 5002);
    $total_metal = 0;
    foreach ($schema as $item)
    {
        if (in_array($metal_array, $item->defindex)
        {
            switch ($item->defindex)
            {
                case 5000:
                   $total_metal++;     // or $total_metal += 1;
                   break;
                case 5001:
                   $total_metal += 3;
                   break;
                case 5002:
                   $total_metal += 9;
                   break;
            }
        }
    }
    

    在此块的末尾,您将在$total_metal 中获得一个值,该值等于您所有金属的废料值。

    此块使用switch 语句来确定特定物品的价值。每个case 中的break 语句可防止逻辑“失败”到下一个选项。

    例如,如果break 没有添加到case 5000 代码块的末尾并且$item->defindex 等于5000,它将添加1,然后添加3。这不是你想要的答案。然而,在某些情况下,这是一个有效的选择。

            switch ($item->defindex)
            {
                case 5000:
                   $total_metal++;     // or $total_metal += 1;
                case 5001:
                   $total_metal += 3;
                   break;
             }
    

    最后,如果您是 PHP 新手,我建议您查看文档:http://php.net/manual/en/index.php

    【讨论】:

    • 谢谢。我讨厌这样做,因为我宁愿自己查找它,但我尝试查找它,但我仍然感到困惑。我会在括号里放什么?从我看到的情况来看,if 语句在数组中查找 5000、5001 和 5002。我不知道 $item->defindex 是什么意思,因为我不知道如何以这种格式编码,也不知道在哪里学习。再说一次,我讨厌这样做,我理解如果你因为这是本地化而没有回答,或者你不喜欢用勺子喂我答案,但如果你能提供帮助,我们将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多