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

これまでのところ、最初の変数はこの最初のもののこれらの defindex のいずれでもないため、これは 0 を返します。私がする必要があるのは、これら 3 つのインスタンスが配列全体を通過するようにすることです。私が見たところ、 for each の中に for 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)

このループでは、関心のある 3 つの値 ( 、、 )$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 に答える