2014-02-19 41 views
2

最近幾天我一直在玩Steam api和PHP,一切都很順利,直到我開始接收奇怪的偏移錯誤和數組重複值。我試圖將代碼分解成沒有使用api調用和html的版本,但仍然收到相同的未知錯誤。4個元素的陣列中未定義的偏移量3

我知道鍵值與數組元素1相同(所以我可以使用array_key_exists())。我喜歡將單個數組中的所有元素都打印到html中。該計劃的目標是快速積累json中檢索的數據。

PHP通知:未定義偏移量:3 ...在線路54
AKA這條線/ test.php的 - >遊戲[$遊戲ID] [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

問題在於何時「更新」(重新設置)$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 
); 

您正在創建一個新陣列,並且只添加3個元素到它。您需要將$games[$gameId][0]添加到新陣列中,以便它具有4個元素。

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

或者,而不是做一個新的數組每一次,只是簡單地做:

if(array_key_exists($gameId, $games)){ 
    $games[$gameId][1] += $newEntry[1]; 
    $games[$gameId][2] += $newEntry[2]; 
    $games[$gameId][3] += 1; 
} 
else { 
    $games[$gameId] = $newEntry; 
}