Php 使用蒸汽Api计算数量

Php 使用蒸汽Api计算数量,php,api,steam,Php,Api,Steam,我在乱搞steam API,我发现我无法获得我的物品数量。假设我有两次项目A,它不会在数量设置为“2”时仅显示一次图片,而是在数量设置为1时显示两次项目 这是我用来获取库存的部分 $backpackURL = "http://api.steampowered.com/IEconItems_440/GetPlayerItems/v0001/?key=" . $APIkey . "&SteamID=" . $profile . "&format=json";

我在乱搞steam API,我发现我无法获得我的物品数量。假设我有两次项目A,它不会在数量设置为“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)
                ';
            }

由于没有ID来查看是否存在任何重复项,因此可以尝试按名称合并它们

通过读取此代码,它首先创建主数组的副本。 我在主数组上循环,然后再次在副本上循环。所以,对于主数组的每个值,都会再次执行一个完整的数组循环,以便对值进行比较

由于预期至少有一个名称,因此我不会立即取消设置,而是在找到另一个结果后才取消设置,
$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.

由于没有ID来查看是否存在任何重复项,因此可以尝试按名称合并它们

通过读取此代码,它首先创建主数组的副本。 我在主数组上循环,然后再次在副本上循环。所以,对于主数组的每个值,都会再次执行一个完整的数组循环,以便对值进行比较

由于预期至少有一个名称,因此我不会立即取消设置,而是在找到另一个结果后才取消设置,
$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.

然后我建议您将
$backpack\u items
附加到一个数组中,过滤掉重复的值并将它们合并到一个数组中。然而,你可能复制粘贴的代码(特别是由于注释),不知道如何更改它。然后我建议你把你的问题精简到细节。有两个变量“链接”到您的问题。这可能是
$id
,具体地说是
$quantity
,其余是过时的信息。而不是循环中的整个代码,而是执行
$tmp[]=$backpack\u items;印刷(tmp)。删除过时的结果或通过pastebin或某种方式发布。根据输出,我没有看到任何重复的id,因此它实际上是一个唯一的项目。但是,如果结果相同,您可以合并名称上的结果。然后,我建议您将
$backpack\u items
附加到一个数组中,过滤掉重复的值并将其合并到单个数组中。然而,你可能复制粘贴的代码(特别是由于注释),不知道如何更改它。然后我建议你把你的问题精简到细节。有两个变量“链接”到您的问题。这可能是
$id
,具体地说是
$quantity
,其余是过时的信息。而不是循环中的整个代码,而是执行
$tmp[]=$backpack\u items;印刷(tmp)。删除过时的结果或通过pastebin或某种方式发布。根据输出,我没有看到任何重复的id,因此它实际上是一个唯一的项目。但是,如果结果相同,则可以合并名称上的结果。