2016-11-15 106 views
0

我的时髦代码有什么问题? 我张贴用ajax字符串
脱颖而出例如:309534368.gif,400559388.jpg,859954067.jpg,821646469.jpg 在我的PHP纸条我写这篇文章explode()给我在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];

为什么?

+4

从'0'开始的4个项目的最大索引是3,但count()返回4. – AbraCadaver

+1

'$ i

+0

我的ajax字符串可能是N长 –

回答

2

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

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

老虎你是时髦的伟人!谢谢!! –

+0

欢迎@TomerTouitou,请接受答案。 :) – Tiger

+0

我neet在接受之前等待 –

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]; 
    } 
} 
?> 
+0

Razib Al Mamun感谢您的帮助!老虎已经回答我 –

+0

不客气@TomerTouitou –

1

虽然老虎和Razib的答案是完全正确的,我想提出,实际上解释了为什么你得到错误的答案无论如何。

首先,将您的< =更改为<确实解决了该问题,但为什么?


借此阵列为例

在这里,我们定义一个包含一些字阵列:

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

上述阵列具有在其内部4“元素”:蛋糕,苹果,树和日志。

通过的var_dump打印阵列(或任何其他)将揭示如下:

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

“问题”

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

正确的尺寸将是数($阵列)-1(= 3)

当你的for循环数组中的每个元素周围循环,它击中:

$item = $array[4] 

哪个元素位五(我们从零开始),这个位置不存在,所以你得到了“未定义”偏移误差


的修复

将修改代码从< =(小于或等于太)改为<(小于)解决了问题,因为forloop将从零循环到小于4(因此3以上是PHP术语中数组的正确大小)

我希望这可以帮助你理解,以及其他任何人以后在谷歌上找到这篇文章为什么使用<(或者只是计数($ array)-1)是PHP阵列所需的选项

+0

哇,击球员解释。 Upvote给你。 –

+0

马克菲利普斯感谢您的解释!它会帮助其他我只是没有注意到我使用<=但你也是伟大的人! –