欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

关于我遇到的php的 offset 的一点的总结

程序员文章站 2022-04-27 08:37:45
...

我们先来一段前奏: ?php $arr = Array(banana, apple, bear); echo $arr[0].br /; echo $arr[3]; ? 从上面可以看出, $arr [3]其实是不存在的,所以运行后出现了一条警告: Notice: Undefined offset: 3 in D:\wamp\apache\htdocs\test…… Undefined offse

我们先来一段前奏:

";  
    echo $arr[3];  
?>  
从上面可以看出,$arr[3]其实是不存在的,所以运行后出现了一条警告:

Notice: Undefined offset: 3 in D:\wamp\apache\htdocs\test……
Undefined offset,说明$arr[3],不存在,其超过了你所设置的数组长度。

再来看一段代码:

".
		  "亚里士多德||希腊||没有一个人能全面把握真理。".
		  "达·芬奇||意大利||运动是一切生命的源泉。";
$data = explode("", $sayings); //explode返回一个数组
foreach($data as $line)
{
	list($author, $nationality, $content) = explode("||", $line);
	echo $nationality."的 ".$author." 说 ".$content."
"; } ?>
执行完后输出:

美国的 爱因斯坦 说 探索真理比占有真理更为可贵。
希腊的 亚里士多德 说 没有一个人能全面把握真理。
意大利的 达·芬奇 说 运动是一切生命的源泉。

Notice: Undefined offset: 2 in D:\wamp\apache\htdocs\test\explode.php on line 29

Notice: Undefined offset: 1 in D:\wamp\apache\htdocs\test\explode.php on line 29
的 说

这是为什么呢?我找了很久,终于发现错误出现在$data = explode("", $sayings);

就是这段代码,还是数组的问题。explode()返回一个函数:

array explode ( string $delimiter , string $string [, int $limit ] )

让我们打印出$data:

Array
(
[0] => 爱因斯坦||美国||探索真理比占有真理更为可贵。
[1] => 亚里士多德||希腊||没有一个人能全面把握真理。
[2] => 达·芬奇||意大利||运动是一切生命的源泉。
[3] =>
)

发现没有,$data[3]为空值,这为下面使用list()函数,然后list()函数在解析$data[3]时就出现offset了。
offset就是你所引用的那个数组值实际不存在,所以出现Undefined offset

就是$sayings 字符串的内容后面多了一个"",导致在用explode()函数时出现了$data[3]这个空值。所以在使用explode()函数时注意了。
解决办法就是改一段代码:$data = explode("", $sayings);

$data = explode("", $sayings, 3);

或在这段代码下面加上 unset($data[count($data)-1]); 就是得把那个空数组值变量给去掉。具体的,读者多多体会吧。

关于我遇到的php的 offset 的一点的总结