我得到了这个PHP错误。
PHP Notice: Undefined offset: 1
以下是抛出该错误的PHP代码。
$file_handle = fopen($path."/Summary/data.txt","r"); //open text file
$data = array(); // create new array map
while (!feof($file_handle) ) {
$line_of_text = fgets($file_handle); // read in each line
$parts = array_map('trim', explode(':', $line_of_text, 2));
// separates line_of_text by ':' trim strings for extra space
$data[$parts[0]] = $parts[1];
// map the resulting parts into array
//$results('NAME_BEFORE_:') = VALUE_AFTER_:
}
这个错误是什么意思? 什么原因导致这个错误?
变化
$data[$parts[0]] = $parts[1];
改为
if ( ! isset($parts[1])) {
$parts[1] = null;
}
$data[$parts[0]] = $parts[1];
或者干脆
$data[$parts[0]] = isset($parts[1]) ? $parts[1] : null;
不是你的文件的每一行都有一个冒号,因此对它进行explode会返回一个大小为1的数组。
返回一个字符串数组,该数组是在分隔符形成的边界上分割字符串参数而创建的。
如果定界符是一个空字符串(""),explode()将返回FALSE。如果定界符包含一个不包含在字符串中的值,并且使用了负数限制,那么将返回一个空数组,**否则,将返回一个包含字符串的数组。
如何在PHP中重现上述错误:
php> $yarr = array(3 => 'c', 4 => 'd');
php> echo $yarr[4];
d
php> echo $yarr[1];
PHP Notice: Undefined offset: 1 in
/usr/local/lib/python2.7/dist-packages/phpsh/phpsh.php(578) :
eval()'d code on line 1
**该错误信息是什么意思?
这意味着php编译器寻找键 "1 "并对其进行哈希运算,没有找到与之相关的任何值,然后说 "未定义的偏移量:1"。
**我怎样才能使这个错误消失?
在返回键值之前询问数组是否存在,像这样。
php> echo array_key_exists(1, $yarr);
php> echo array_key_exists(4, $yarr);
1
如果数组不包含你的键,就不要问它的值。 虽然这个方案让你的程序做了双重工作,即先检查它是否存在,然后再去获取它。
另一种更快的解决方案:。
如果获得一个缺失的键是由错误引起的特殊情况,那么直接获得值(如echo $yarr[1];
)会更快,然后捕捉偏移错误并像这样处理: https://stackoverflow.com/a/5373824/445131