2017-03-07 4 views
1

Ich war mit der Dampf-API rum und ich fand heraus, dass ich nicht die Menge meiner Artikel bekommen konnte. Sagen wir, ich habe Artikel A 2 mal, es zeigt nicht das Bild nur 1 mal mit der Menge auf "2", aber stattdessen zeigt es den Artikel zweimal mit der Menge auf 1.Zählen der Menge mit der Steam Api

Dies ist der Teil I Verwenden Sie, um das Inventar zu erhalten.

$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']; 

Und hier habe ich eine Liste aller Produkte:

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) 
       '; 
      } 
+0

Dann schlage ich vor, Sie '$ backpack_items' an ein Array anhängen und die doppelten Werte herausfiltern und sie zu einem einzigen Array zusammenführen. Allerdings kopierst du wahrscheinlich den Code (vor allem aufgrund der Kommentare) und weiß nicht, wie man es ändert. – Xorifelse

+0

Dann schlage ich vor, dass Sie Ihre Frage auf Details abschneiden. Es gibt 2 Variablen, die zu Ihrer Frage "verlinken". Dies ist wahrscheinlich "$ id" und spezifisch "$ quantity", der Rest ist veraltete Information. Statt des gesamten Codes ** innerhalb der Schleife, mach '$ tmp [] = $ backpack_items; print_r ($ tmp); '. Entfernen Sie die veralteten Ergebnisse oder posten Sie sie über Pastebin oder eine andere Art. – Xorifelse

+0

Entsprechend der Ausgabe, sehe ich keine doppelten IDs, so dass es tatsächlich ein eindeutiges Element wäre. Sie könnten jedoch die Ergebnisse für den Namen zusammenführen, wenn sie identisch sind. – Xorifelse

Antwort

0

Da es keine ID zu sehen, ob es irgendwelche Duplikate sind, können Sie versuchen, sie mit Namen zu verschmelzen.

Durch Lesen dieses Codes wird zuerst eine Kopie des Hauptarrays erstellt. Ich Schleife über das Haupt-Array, dann wieder über die Kopie. Daher wird für jeden Wert des Hauptarrays ein vollständiger Zyklus des Arrays erneut für Werte ausgeführt, mit denen verglichen werden soll.

Da erwartet wird, dass es mindestens einen Namen gibt, werde ich nicht sofort unscharf schalten, sondern erst, nachdem ein anderes Ergebnis gefunden wurde, daher die .

Es ist Menge erhöht, wenn ein Betrüger gefunden wird, auf der Taste der Hauptschleife.

$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.