未定义的偏移PHP错误

我在PHP中收到以下错误

Notice undefined offset 1: in C:\wamp\www\includes\imdbgrabber.php line 36 

这是导致它的PHP代码:

 <?php # ... function get_match($regex, $content) { preg_match($regex,$content,$matches); return $matches[1]; // ERROR HAPPENS HERE } 

错误是什么意思?

如果preg_match没有find匹配, $matches是一个空数组。 因此,您应该检查preg_match在访问$matches[0]之前是否find了匹配项,例如:

 function get_match($regex,$content) { if (preg_match($regex,$content,$matches)) { return $matches[0]; } else { return null; } } 

如何在PHP中重现这个错误:

创build一个空数组,并要求给定一个这样的键的值:

 php> $foobar = array(); php> echo gettype($foobar); array php> echo $foobar[0]; PHP Notice: Undefined offset: 0 in /usr/local/lib/python2.7/dist-packages/phpsh/phpsh.php(578) : eval()'d code on line 1 

发生了什么?

你问了一个数组给你一个它不包含的键的值。 它会给你的值NULL,然后把上面的错误在错误日志。

它在数组中查找您的密钥,并发现undefined

如何使错误不会发生?

在询问其价值之前询问密钥是否存在。

 php> echo array_key_exists(0, $foobar) == false; 1 

如果密钥存在,则获取该值,如果不存在,则不需要查询其值。

PHP中未定义的偏移量错误与Java中的“ArrayIndexOutOfBoundException”类似。

例:

 <?php $arr=array('Hello','world');//(0=>Hello,1=>world) echo $arr[2]; ?> 

错误:未定义偏移量2

这意味着你指的是一个不存在的数组键。 “偏移”是指数字数组的整数键,“索引”是指关联数组的string键。

未定义的偏移意味着有一个空的数组键,例如:

 $a = array('Felix','Jon','Java'); // This will result in an "Undefined offset" because the size of the array // is three (3), thus, 0,1,2 without 3 echo $a[3]; 

您可以使用循环(while)来解决问题:

 $i = 0; while ($row = mysqli_fetch_assoc($result)) { // Increase count by 1, thus, $i=1 $i++; $groupname[$i] = base64_decode(base64_decode($row['groupname'])); // Set the first position of the array to null or empty $groupname[0] = ""; }