我的时髦代码出了什么问题?
我使用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];
为什么?
答案 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];
}
}
?>