0

我正在使用 steam api 来循环浏览背包中的物品。这是我返回的部分内容。

{
"result": {
    "status": 1,
    "num_backpack_slots": 900,
    "items": [
        {
            "id": 1828738510,
            "original_id": 1828738510,
            "defindex": 166,
            "level": 5,
            "quality": 6,
            "inventory": 2147484295,
            "quantity": 1,
            "origin": 0,
            "flag_cannot_trade": true,
            "attributes": [
                {
                    "defindex": 143,
                    "value": 1373392596,
                    "float_value": 118276915200.000000
                },
                {
                    "defindex": 292,
                    "value": 1115684864,
                    "float_value": 64.000000
                },
                {
                    "defindex": 388,
                    "value": 1115684864,
                    "float_value": 64.000000
                },
                {
                    "defindex": 153,
                    "value": 1065353216,
                    "float_value": 1.000000
                }
            ]

        },
        {
            "id": 1828947755,
            "original_id": 1178542060,
            "defindex": 5009,
            "level": 1,
            "quality": 6,
            "inventory": 2147484021,
            "quantity": 1,
            "origin": 4
        },
        {
            "id": 1828947766,
            "original_id": 1179066746,
            "defindex": 5005,
            "level": 1,
            "quality": 6,
            "inventory": 2147483798,
            "quantity": 1,
            "origin": 4
        },
        {
            "id": 1828947780,
            "original_id": 1181421843,
            "defindex": 5009,
            "level": 1,
            "quality": 6,
            "inventory": 2147484020,
            "quantity": 1,
            "origin": 4
        },

等等。

我想做的是使用foreach(或其他有效的方法)为我的defindex循环。这是我当前的代码:

<?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);

$total_metal = 0;

if ($schema-> result -> items[0] -> defindex == 5000)
{
     $total_metal++;
}
if ($schema-> result -> items[0] -> defindex == 5001)
{
 $total_metal+= 3;
}
if ($schema-> result -> items[0] -> defindex == 5002)
{
     $total_metal+= 9;
}

print $total_metal;
?>

到目前为止,这返回 0,因为第一个变量不是第一个变量中的任何这些定义索引。我需要做的是让这 3 个实例遍历整个数组。从我所看到的情况来看,我需要在 for each 中为 each 写一个,但是环顾四周,我找不到任何可以帮助我的东西。提前致谢。

4

2 回答 2

0

好吧,如果 foreach 不起作用怎么办

for($i = 0; $i < ($schema-> result-> items.length; i++){
    if ($schema-> result -> items[i] -> defindex == 5000)
    {
         $total_metal++;
    }
    if ($schema-> result -> items[i] -> defindex == 5001)
    {
         $total_metal+= 3;
     }
    if ($schema-> result -> items[i] -> defindex == 5002)
    {
      $total_metal+= 9;
    }
}

如果这不起作用(因为由于某种原因您无法访问长度),您也可以这样做:

$i = 0;
while($schema -> result -> items[i]){
      //do stuff
      $i++;
}
于 2013-10-22T23:21:32.227 回答
0

您将需要遍历$schema. 您可以使用foreach循环来执行此操作。

foreach ($schema as $item)

在此循环中,您将$item->defindex根据您关心的三个值(500050015002)检查该值。

$metal_array = array(5000, 5001, 5002);

如果它与这些值之一匹配,那么您将执行适当的数学运算。

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;
    }
}

这整个if块在你的 foreach 循环中。在循环结束时,$total_metal应该包含背包中的金属量。

于 2013-10-23T01:57:23.693 回答