我有一些偶尔返回的代码和“Undefined Offset 8。”
我搜索过,找不到“Undefined Offset”定义,使其更加神秘。
以下是代码:
while($lowest_plays !== $plays[$x]){
$x = rand(0,count($plays));
}
偏移发生在while循环上,这似乎是通常发生此特定偏移的位置。 $ lowest_plays和$ plays变量总是正常的,我没有看到“Undefined Offset”发生时的任何模式。
变量$x
是0
和$plays-1
之间的随机数。
以下是“Undefined Offset 8”通知之一的值:
Plays: Array ( [0] => 147 [1] => 147 [2] => 146 [3] => 147 [4] => 147 [5] => 146 [6] => 147 [7] => 146 )
Lowest Plays: 146
Random variable ($): 1
答案 0 :(得分:5)
数组是零索引的,所以数组项是$ plays [0] .. upto $ plays [7]。 count
是8 - 元素的总数。所以你需要
$x = rand(0,count($plays) - 1);
否则在某个阶段你试图阅读不存在的$plays[8]
。
答案 1 :(得分:2)
引自你的问题:
变量$ x是0到$ play -1之间的随机数。
如果这是真的,你就不会有问题,但是看看rand(min, max)
的返回值,它会说明(突出显示我自己的):
min(或0)和max(或getrandmax(),包含)之间的伪随机值。
因此,正确的陈述应该是:
$x = rand(0,count($plays) - 1);
答案 2 :(得分:1)
在$plays
中,您没有任何带有索引8的条目。rand
功能包括$min
和$max
,因此您需要
$x = rand(0, count($plays)-1);
答案 3 :(得分:1)
您正在生成0到count($plays)
之间的随机数,以用作$ plays []的索引。播放的大小是8个元素,但索引从0到7。
你应该像这样计算你的randim数字:
while($lowest_plays !== $plays[$x]){
$x = rand(0,count($plays)-1); // random from 0 to 7
}
答案 4 :(得分:1)
数组中有8个元素,所以
rand(0, count($plays))
将为您提供0到8之间的随机整数;
如果碰巧给你8,你试图访问$ plays [8],那就是错误的地方。正确的方法:
rand(0, count($plays)-1)