2013-07-09 45 views
0

我有一些偶尔返回的代码和“Undefined Offset 8”。为什么我偶尔会得到“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之间的随机数。

以下是其中的“未定义偏移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

最后一个数组的索引是'计数($阵列) - 1'。您在0和数组长度之间随机化。但最后的指数<长度。 – mario

+0

请重新阅读['rand()']的手册页(http://sg3.php.net/manual/en/function.rand.php#refsect1-function.rand-returnvalues)。 –

回答

3

数组零索引,以使阵列项$戏剧[0] ..高达$戏剧[7] 。 count是8 - 元素的总数。因此,你需要

$x = rand(0,count($plays) - 1); 

否则在你试图读取$plays[8]不存在的某个阶段。

+0

是的,我明白了。我有'$ x = rand(0,count($ plays)-1);'在while循环之前,但之后没有改变。好眼睛。首先我看到了这一点,就像是“我已经这样做了”,然后我看到发生了什么。谢谢!很有帮助。 – JVE999

1

$plays,你不必与任何索引条目8. rand功能包括$min$max所以你需要

$x = rand(0, count($plays)-1); 
1

你生成0和count($plays)之间的随机数作为索引使用到$戏剧[]。戏剧的大小是8元,但指数从0到7

你应该计算你randim号码这样的:

while($lowest_plays !== $plays[$x]){ 
    $x = rand(0,count($plays)-1); // random from 0 to 7 
} 
1

你有8个元素的数组中如此

rand(0, count($plays)) 

会给你一个从0到8的随机整数;

如果它碰巧给你8,并且你试图访问$ plays [8],那就是错误所在。正确的方法:

rand(0, count($plays)-1) 
2

从你的问题引用:

变量$ x为0和$戏剧之间的随机数 - 1

如果这是真的,你不会有问题,但看看rand(min, max)的返回值,它表示(突出显示我自己的):

min(或0)和max(或getrandmax(),,包括)之间的伪随机值。

因此,正确的说法应该是:

$x = rand(0,count($plays) - 1); 
相关问题