【问题标题】:Counting the quantity by using the Steam Api使用 Steam Api 计算数量
【发布时间】:2017-03-07 23:58:24
【问题描述】:

我在使用 Steam API 时发现我无法获取我的商品数量。假设我有 2 次物品 A,它不会仅显示 1 次,数量设置为“2”,而是显示该物品两次,数量设置为 1。

这是我用来获取库存的部分。

    $backpackURL = "http://api.steampowered.com/IEconItems_440/GetPlayerItems/v0001/?key=" .     $APIkey . "&SteamID=" . $profile . "&format=json";
    $schemaURL = "http://api.steampowered.com/IEconItems_440/GetSchema/v0001/?key=" . $APIkey . "&language=en";

    $userBackpack = json_decode(file_get_contents($backpackURL), true);
    $itemSchema = json_decode(file_get_contents($schemaURL), true);

    $backpack_items = $userBackpack['result'];
    $schema_items = $itemSchema['result'];

我在这里列出所有项目:

  foreach($backpack_items['items'] as $ind=>$backpack_items){
                $id =  $backpack_items['id'];
                $defindex = $backpack_items['defindex'];
                $name = getItemName($schema_items, $defindex, $image_url);
                $quantity = $backpack_items['quantity'];
                $inventory = $backpack_items['inventory'];

                echo '
                    $tmp[] = $backpack_items; print_r($tmp)
                ';
            }

【问题讨论】:

  • 那么我建议您将$backpack_items 附加到一个数组中,并过滤掉重复值并将它们合并到一个数组中。但是,您可能复制粘贴了代码(尤其是由于 cmets)并且不知道如何更改它。
  • 那我建议你把你的问题精简到细节。有 2 个变量“链接”到您的问题。这可能是$id,特别是$quantity,其余的都是过时的信息。而不是整个代码inside循环,做$tmp[] = $backpack_items; print_r($tmp);。删除过时的结果或通过 pastebin 或某种方式发布。
  • 根据输出,我没有看到任何重复的 id,所以它实际上是一个独特的项目。但是,如果它们相同,您可以合并名称上的结果。

标签: php api steam


【解决方案1】:

由于没有ID查看是否有重复,可以尝试按名称合并。

通过阅读这段代码,它首先创建了一个主数组的副本。 我循环遍历主数组,然后再次遍历副本。因此,对于主数组的每个值,都会再次完成一个完整的数组循环,以便与值进行比较。

由于预计至少有 1 个名称,我不会立即取消设置,而是在找到另一个结果后才取消设置,因此 $b

如果发现一个骗子,它的数量会增加,在主循环的键上。

$copy = $backpack_items['items'];

foreach($backpack_items['items'] as $k => $v){
  $b = false;
  $s = '';
  $n = getItemName($schema_items, $v['defindex'], $s);

  foreach($copy as $k2 => $v2){
    if($n == getItemName($schema_items, $v2['defindex'], $s)){
      if(!$b){
        $b = $k;
      } else {
        unset($backpack_items['items'][$k2]);
        $backpack_items['items'][$k]['quantity'] += 1;
      }
    }
  }
}

// Now use your original loop, and the dupes should be removed.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-24
    • 2021-02-07
    • 2015-06-01
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 2013-03-12
    相关资源
    最近更新 更多