Подсчет количества элементов в массиве JSON для Steam API

У меня работает и работает Steam API, но я хочу подсчитать, сколько раз элемент находится в массиве, чтобы я мог распечатать, сколько предметов у меня есть на складе.

Я использую это для предметов Team Fortress 2.

Это URL, который я использую. Я вынул свой ключ API и идентификатор Steam http://api.steampowered.com/IEconItems_440/GetPlayerItems/v0001/?key=APIKey&SteamID=Steam_ID&format=json

Его вывод:

{
"result": {
    "status": 1,
    "num_backpack_slots": 300,
    "items": [
        {
            "id": 1264649944,
            "original_id": 1264649944,
            "defindex": 267,
            "level": 4,
            "quality": 5,
            "inventory": 2147483948,
            "quantity": 1,
            "origin": 1,
            "flag_cannot_trade": true
        },

Но есть и другие предметы, кроме этого.

Я хочу знать, как подсчитать количество элементов с определенным индексом и распечатать его.

РЕДАКТИРОВАТЬ:

<?php
$link = file_get_contents('http://api.steampowered.com/IEconItems_440/GetPlayer Items/v0001/?key=&SteamID=&format=json');
$myarray = json_decode($link, true);

print $myarray['result']['items'][0]['id'];
?>

person Armageddon08    schedule 26.04.2014    source источник
comment
Я вижу ваше редактирование, я обновлю свой ответ.   -  person John V.    schedule 26.04.2014


Ответы (2)


Используйте count PHP:

<?php
$link = file_get_contents('http://api.steampowered.com/IEconItems_440/GetPlayer Items/v0001/?key=&SteamID=&format=json');
$myarray = json_decode($link, true);

echo count($myarray['result']['items']);
?>

РЕДАКТИРОВАТЬ: Чтобы подсчитать единицы с определенным свойством, вам придется пройти через все из них и увеличить переменную:

<?php
$link = file_get_contents('http://api.steampowered.com/IEconItems_440/GetPlayer Items/v0001/?key=&SteamID=&format=json');
$myarray = json_decode($link, true);

$count = 0;
foreach($myarray['result']['items'] as $item){
    if($item['defindex'] == 267){//or whatever you're looking for
        $count++;
    }
}
echo $count;
?>
person John V.    schedule 26.04.2014
comment
Работает отлично. Большое тебе спасибо - person Armageddon08; 26.04.2014
comment
что, если я хочу найти несколько дефиндексов и отобразить их все вместе - person Armageddon08; 26.04.2014
comment
Вы бы добавили больше проверок в оператор if, разделив их ||, что означает or. - person John V.; 26.04.2014

Вам нужно пройтись по массиву items. Если вы ищете конкретное defindex, вы просто подсчитаете, сколько раз вы видите это конкретное значение.

$total = 0;
foreach ($myarray->result->items as $item)
{
    if ($item->defindex == 5000)    // Scrap metal
    {
       $total++;
    }
}

Если вы хотите подсчитать каждый тип элемента, вам нужно сделать что-то вроде:

$inv_array = array();
foreach ($myarray->result->items as $item)
{
    if (array_key_exists($item->defindex,$inv_array))
    {
        $inv_array[$item->defindex]++;
    }
    else
    {
        $inv_array[$item->defindex] = 1;
    }
}

var_dump($inv_array);

Он будет содержать массив со счетчиком каждого уникального defindex

Ошибка в приведенном выше коде заключается в том, что вы смотрите на id. Это уникально для каждого предмета в экономике TF2 И меняется с каждым новым владельцем и каждым новым инструментом, примененным к предмету.

person Andy♦    schedule 26.04.2014
comment
я печатал ID просто для примера - person Armageddon08; 26.04.2014