ホームページ  >  記事  >  php教程  >  关于我遇到的php的 offset 的一点的总结

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

WBOY
WBOYオリジナル
2016-06-06 19:45:141731ブラウズ

我们先来一段前奏: ?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

我们先来一段前奏: 

<?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 offset,说明$arr[3],不存在,其超过了你所设置的数组长度。

再来看一段代码:  

<?php header("Content-Type:text/html;charset=utf-8");
$sayings = "爱因斯坦||美国||探索真理比占有真理更为可贵。<|>".
		  "亚里士多德||希腊||没有一个人能全面把握真理。".
		  "达·芬奇||意大利||运动是一切生命的源泉。";
$data = explode("", $sayings); //explode返回一个数组
foreach($data as $line)
{
	list($author, $nationality, $content) = explode("||", $line);
	echo $nationality."的 ".$author." 说 ".$content."<br>";
}
?>
执行完后输出:

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

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 的一点的总结




声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。