explode()在php中给我未定义的偏移量

时间:2016-11-15 13:28:17

标签: php explode

我的时髦代码出了什么问题? 我使用ajax发布一个字符串
前例:309534368.gif,400559388.jpg,859954067.jpg,821646469.jpg 在我的PHP脚本中,我写这个

$gr = preg_replace('#[^a-z0-9-,.]#i', '', $_POST['gr']);
  $array_gr = explode(',',$gr);
  if(count($array_gr)>=1){
      for($i=0;$i<= count($array_gr);$i++){
       $corentimg=$array_gr[$i];
......

当我运行我的代码时,我得到了我想要的内容+ Notice Undefined offset: 在这一行$corentimg=$array_gr[$i];

为什么?

3 个答案:

答案 0 :(得分:2)

如果您的代码出现条件错误,请将<=替换为<

    for($i=0; $i< count($array_gr);$i++){
         $corentimg=$array_gr[$i];
............

答案 1 :(得分:1)

虽然Tiger和Razib的回答是完全正确的,但我想提交一个答案,这实际上解释了为什么你会收到错误。

首先,将你的&lt; =更改为&lt;确实解决了这个问题,但为什么呢?

以此数组为例

这里我们定义一个包含一些单词的数组:

$array = ["cake","apple","tree","log"];

上面的数组里面有4个“元素”:蛋糕,苹果,树和日志。

通过var_dump(或其他任何东西)打印数组将显示以下内容:

0: cake
1: apple
2: tree
3: log

“问题”

使用count($ array)将返回4,这是正确的,因为数组中有4个元素,但是因为PHP的索引从零开始,4实际上是错误的。

正确的大小是count($ array)-1(= 3)

当你的forloop在数组的每个元素周围循环时,它会命中:

$item = $array[4]

哪个是元素位置5(因为我们从零开始),这个位置不存在,因此你得到'Undefined offset'错误

修复

将您的代码从&lt; =(小于或等于)更改为&lt; (小于)解决了这个问题,因为forloop将从零循环到小于4(因此3,上面解释的是PHP术语中数组的正确大小)

我希望这可以帮助您理解,以及之后在Google上发现这篇文章的其他人为什么要使用&lt; (或者只是count($ array)-1)是PHP Arrays所需的选项

答案 2 :(得分:0)

for循环中的

应该是$i < count($array_gr)而不是$i <= count($array_gr),如下所示:

<?php
$gr = preg_replace('#[^a-z0-9-,.]#i', '', $_POST['gr']);
$array_gr = explode(',',$gr);
if(count($array_gr)>=1){
  for($i=0;$i<count($array_gr);$i++){
    $corentimg=$array_gr[$i];
  }
}
?>