2016-11-15 26 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

馬克菲利普斯感謝您的解釋!它會幫助其他我只是沒有注意到我使用<=但你也是偉大的人! –