2

I have been playing with the Steam api and PHP the last couple days and all was well until I started receiving strange offset errors and duplicate values in my array. I tried breaking the code down into a version without api calls and html, but still receive the same unknown error.

I know that the key value is the same as the array element 1 (so I can use array_key_exists()). I like having all the elements in a single array for printing to html. The objective of the program is to make a fast accumulation of the data retrieved in json.

PHP Notice: Undefined offset: 3 in .../test.php on line 54
AKA This line -> games[$gameId][3] += 1

 $games=array();
 $i=10;
 while($i>0){
     $i--;
     $playtime = rand(1,1500);
     $twpt = rand(1,300);
     $gameId = rand(5,15);

     // clearly 4 elements in the array to use
     $newEntry = array($gameId, $playtime, $twpt, 1);

     if(array_key_exists($gameId, $games)){
         $games[$gameId] = array(
             //$games[$gameId][0] will not change
             $games[$gameId][1] += $newEntry[1],
             $games[$gameId][2] += $newEntry[2],
             $games[$gameId][3] += 1
         );
     } else {
         $games[$gameId] = $newEntry;
     }
 }

1 Answer 1

1

The problem is when you are "updating" (re-setting) $games[$gameId][3].

$games[$gameId] = array(
    //$games[$gameId][0] will not change
    $games[$gameId][1] += $newEntry[1],
    $games[$gameId][2] += $newEntry[2],
    $games[$gameId][3] += 1
);

You are creating a new array, and are only adding 3 elements to it. You need to add $games[$gameId][0] to the new array, so that it will have 4 elements.

$games[$gameId] = array(
    $games[$gameId][0],
    $games[$gameId][1] += $newEntry[1],
    $games[$gameId][2] += $newEntry[2],
    $games[$gameId][3] += 1
);

Or, instead of making a new array every time, just simply do:

if(array_key_exists($gameId, $games)){
    $games[$gameId][1] += $newEntry[1];
    $games[$gameId][2] += $newEntry[2];
    $games[$gameId][3] += 1;
}
else {
     $games[$gameId] = $newEntry;
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.