2013-10-22 158 views
0

我正在使用蒸汽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 
     }, 

依此类推。

我想要做的是通过这个为我的defindex使用foreach(或其他工程)循环。这是我当前的代码:

<?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,因为第一个变量不是第一个这些defindex中的任何一个。我需要做的是让这三个实例遍历整个阵列。从我看到的,我需要为每一个内部写一个,但环顾四周,我无法找到任何能够帮助我的东西。提前致谢。

回答

0

您需要遍历$schema中的每个项目。你可以用foreach循环做到这一点。

foreach ($schema as $item) 

在这个循环中,你会核对你所关心的(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应包含背包中的金属量。

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