错误处理-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";
Sashi Giri answered 2019-10-15T00:14:08Z
-5 votes
您也可以尝试删除警告...
error_reporting=0
Sagar Kubavat answered 2019-10-15T00:14:32Z