php数组在使用前未定义,错误处理-PHP注意:未定义偏移量:读取d时带数组

错误处理-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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值