2013-11-14 61 views
0

我試圖使用此代碼來分析數組,但它給出了該錯誤。但是,如果我從代碼塊中刪除,只給出它的工作原理。這是代碼。1中未定義的偏移量錯誤

//This function gives error: Notice: Undefined offset: 1 in ....... 
//but if i delete while block and only write print $type[$i]; it works. 

public function checkMimeType(){ 
     echo '<pre>'; 
     $i = 0; 
     $type = array(); 
      foreach($this->_sourceFile as $key){ 

       $type= $key['type']; 

      } 
     while($i <= count($type)) 
     { 
      print $type[$i].'<br>'; 
      $i++; 
     } 

    } 
+0

我假設'$型= $鍵[「型」]'是一個字符串?並且你正試圖在一個字符串上count()'後面加一個數組偏移量'$ type [$ 1]' – Scuzzy

回答

0

你是一個循環時間經常;)

索引編號從零開始。如果陣列中有一個元素,則唯一定義的索引因此爲0. count()將返回1. 如果循環'直到$i<= 1,它將停止在$i = 1。有與1

的ID沒有元素所以,相反,使用while($i < count($type))

+0

謝謝你。它現在正常工作。順便說一句$ i <= count($ type)-1是否同樣正確?謝謝 –

+0

@AskerMan做同樣的事情,但不是那麼幹淨。爲什麼做額外的數學是不必要的? –

0

計數不等於最後一個索引。

數組[x, y, z]的計數爲3,但最後一個索引是2

因此,在你的while循環中,你不能運行,直到<= count,但只有< count。當$i變爲count時,索引已超出範圍。

+0

不客氣:-)請將你的問題標記爲已回答。 – thst

+0

我該怎麼做? –

0

在您的第一個循環中,您沒有爲數組添加值,因此每次都覆蓋$type變量。嘗試一下:

$type[] = $key['type']; 

編輯:而且還什麼@thst說

+0

$ type = $ key ['type']不覆蓋。我現在檢查它?你確定? –

+0

是的,我確定。第一個循環完成後,'$ type'將只包含一個值,而不包含值的數組。這是因爲您每次都爲其分配一個值,而不是將值添加到數組中。 – Martin

+0

@Martin是完全正確的。你不是將數組添加到數組中,而是將其設置爲$ this - > _ sourceFile內最後一個元素內的任何元素。 –