多维数组循环

时间:2013-10-22 23:14:12

标签: api multidimensional-array foreach

我正在使用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个实例遍历整个数组。从我所看到的我需要为每个内部写一个,但环顾四周,我找不到任何可以帮助我的东西。提前谢谢。

2 个答案:

答案 0 :(得分: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++;
}

答案 1 :(得分:0)

您需要循环浏览$schema中的每个项目。您可以使用foreach循环执行此操作。

foreach ($schema as $item)

在此循环中,您将针对您关注的三个值($item->defindex50005001)检查5002值。

$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应该包含背包中的金属量。