过去几天我一直在使用Steam api和PHP,一切都很好,直到我开始收到奇怪的偏移错误并在我的数组中重复值。我尝试将代码分解为没有api调用和html的版本,但仍然收到相同的未知错误。
我知道键值与数组元素1相同(所以我可以使用array_key_exists())。我喜欢将单个数组中的所有元素打印到html。该计划的目标是快速积累在json中检索的数据。
PHP注意:未定义的偏移量:在第54行的... / test.php中为3 AKA这一行 - >游戏[$ 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;
}
}
答案 0 :(得分: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
);
您正在创建一个 new 数组,并且只添加了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;
}