错误处理-PHP注意:未定义偏移量:读取d时带数组

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

这个错误是什么意思? 是什么导致此错误?

8个解决方案
103 votes

更改

$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爆炸可能返回的值:

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

如果定界符为空字符串(“”),则explode()将返回FALSE。 如果定界符包含的值不包含在字符串中,并且使用负数限制,则将返回一个空数组,否则将返回一个包含字符串的数组。

GGio answered 2019-10-15T00:10:36Z
19 votes

如何在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并对其进行哈希处理,但未找到与之相关的任何值,然后说echo $yarr[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]

Eric Leschinski answered 2019-10-15T00:11:46Z
1 votes

这是“ PHP声明”,因此从理论上讲您可以忽略它。 变更php.ini

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED

error_reporting = E_ALL & ~E_NOTICE

这将显示所有错误,除非另行通知。

Orijmm answered 2019-10-15T00:12:18Z
0 votes

我最近才遇到这个问题,甚至都不敢相信这是我的错字:

Array("Semester has been set as active!", true)
Array("Failed to set semester as active!". false)

实际上是! 我只是不小心输入了“。” 而不是 ”,”...

Erikas answered 2019-10-15T00:12:49Z
0 votes

在文件中隐藏PHP警告

error_reporting(0);
Vitalicus answered 2019-10-15T00:13:12Z
0 votes

我最快的解决方案是将数组的长度减去-1

  $len = count($data);

    for($i=1; $i<=$len-1;$i++){
      echo $data[$i];
    }

我的偏移量始终是最后一个值(如果计数为140),那么它将说offset 140,但是在使用减号1之后,一切都很好

Daniel Charles mwangila answered 2019-10-15T00:13:43Z
0 votes

理想的解决方案如下。 您将不会错过0到n之间的值。

$len=count($data); for($i=0;$i<$len;$i++) echo $data[$i]. "<br>";
Sashi Giri answered 2019-10-15T00:14:08Z
-5 votes

您也可以尝试删除警告...

error_reporting=0
Sagar Kubavat answered 2019-10-15T00:14:32Z
translate from https://stackoverflow.com:/questions/17456325/php-notice-undefined-offset-1-with-array-when-reading-data