为什么我偶尔会得到“Undefined Offset 8?”

时间:2013-07-09 01:54:53

标签: php

我有一些偶尔返回的代码和“Undefined Offset 8。”

我搜索过,找不到“Undefined Offset”定义,使其更加神秘。

以下是代码:

while($lowest_plays !== $plays[$x]){
    $x = rand(0,count($plays));
}

偏移发生在while循环上,这似乎是通常发生此特定偏移的位置。 $ lowest_plays和$ plays变量总是正常的,我没有看到“Undefined Offset”发生时的任何模式。

变量$x0$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

5 个答案:

答案 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)