Конденсация веб-API Steam

Я искал ответ на этот вопрос, но ничего не нашел и искал помощи у вас, замечательных людей. Я играл с веб-API Steam для своего сайта. Я нашел этот код и использую его. Кроме того, у меня почти нет опыта работы со 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. Этот код входит в мой паровой рюкзак и дает мне все предметы, которые у меня есть в сложном списке. Мне нужна помощь, чтобы сжать его так, чтобы его можно было легко прочитать. Определяющей особенностью предметов инвентаря являются дефиндексы. Что я хочу сделать, так это иметь его, чтобы, если он найдет определенное количество одного предмета с тем же индексом определения, он вернул бы это количество на мою страницу следующим образом: Металлолом = количество найденных индексов определения металлолома. Я надеюсь, что это достаточно ясно, и что есть ответ. Спасибо.

Часть моего кода, который возвращается сейчас:

{
                "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.

person Tyler    schedule 23.09.2013    source источник


Ответы (1)


Вам нужно будет просмотреть каждый элемент в вашем результате $schema и найти нужные индексы.

Например, если вы хотите посчитать весь свой металл, вам нужно искать 5000, 5001 и 5002.

$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 относится к defindex текущего объекта $item в вашей схеме. Вы выполняете итерацию объекта в этом цикл foreach. Каждый 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). При этом проходе через цикл он проверит, находится ли $item->defindex, что равно 5009, в $metal_array, который содержит 5000, 5001, and5002`. Это не так, поэтому блок 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, чтобы определить, сколько стоит конкретный элемент. . Оператор break внутри каждого case предотвращает "провал" логики в следующий вариант.

Например, если 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

person Andy♦    schedule 23.09.2013
comment
Спасибо. Я ненавижу это делать, потому что я бы предпочел сам поискать, но я попытался найти это, и я все еще в замешательстве. Что бы я поставил в скобки? Из того, что я вижу, оператор if ищет в массиве 5000, 5001 и 5002. Я понятия не имею, что означает $item->defindex, потому что понятия не имею, как программировать в этом формате, и не знаю, где этому научиться. Опять же, я ненавижу это делать, и я понимаю, если вы не ответите из-за того, что это локализовано, или вам не нравится давать мне ответы с ложки, но я был бы признателен, если бы вы могли помочь. - person Tyler; 24.09.2013