PHP 注意:未定义的偏移量:读取数据时带数组的偏移量为 1

我收到此 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_:
}

此错误是什么意思?导致此错误的原因是什么?


答案 1

改变

$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;

并非文件的每一行都有冒号,因此在它上面爆炸会返回一个大小为 1 的数组。

根据 php.net 分解的可能返回值

返回通过在分隔符形成的边界上拆分字符串参数而创建的字符串数组。

如果分隔符是空字符串 (“”),则 explode() 将返回 FALSE。如果分隔符包含字符串中未包含的值,并且使用了负限制,则将返回空数组,否则将返回包含字符串的数组。


答案 2

如何在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编译器查找了密钥并对其运行了哈希值,但没有找到与之关联的任何值,然后说1Undefined offset: 1

如何使该错误消失?

在返回其值之前,询问数组是否存在键,如下所示:

php> echo array_key_exists(1, $yarr);

php> echo array_key_exists(4, $yarr);
1

如果数组不包含您的密钥,请不要要求输入其值。尽管此解决方案使您的程序需要双重工作才能“检查它是否存在”,然后“去获取它”。

更快的替代解决方案:

如果获取丢失的密钥是由错误引起的异常情况,则只需获取值(如 中 所示),并捕获该偏移错误并按如下方式处理它会更快:https://stackoverflow.com/a/5373824/445131echo $yarr[1];


推荐