Search code examples
phpjsonsteam-web-api

Invalid argument supplied for foreach() - can't loop through two arrays


My code should convert "defindex" from array_inv into "item_name" from array_schema:

<?php
    $apikey = "X";
    $steamid = $steamprofile['steamid'];
    $url_inv = "http://api.steampowered.com/IEconItems_730/GetPlayerItems/v0001/?language=en?key=". $apikey . "&steamid=" . $steamid . "&format=json";
    $url_schema = "http://git.optf2.com/schema-tracking/plain/Counter%20Strike%20Global%20Offensive%20Schema?h=counterstrikeglobaloffensive";
    $array_inv_raw = file_get_contents($url_inv);
    $array_schema_raw = file_get_contents($url_schema);

    $array_inv = json_decode($array_inv_raw,true);
    $array_schema = json_decode($array_schema_raw,true);

    foreach($array_inv['result']['items'] as $item){
        foreach($array_schema['result']['items'] as $schemaItem){
            if($item['defindex'] == $schemaItem['defindex']){
                echo $schemaItem['item_name'].'<br />';
                break;
            }
        }
    }
?>

But it's resulting in these errors:

Warning: file_get_contents(http://api.steampowered.com/IEconItems_730/GetPlayerItems/v0001/?language=en?key=x&steamid=76561198037897388&format=json): failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in /home/kartm/public_html/scripts/inv.php on line 6

Warning: Invalid argument supplied for foreach() in /home/kartm/public_html/scripts/inv.php on line 12

The urls: array_inv array_schema

I can't find any mistakes. Can you tell me what's wrong with this code?


Solution

  • These errors were caused by a typo in a url:

    http://api.steampowered.com/IEconItems_730/GetPlayerItems/v0001/?language=en?key=x&steamid=76561198037897388&format=json
    

    It should have been & key=x instead of ?key=x.

    file_get_contents couldn't fetch the url, thus the foreach had an invalid, empty argument.