2012-10-15 37 views
0

我一直在尋找這個問題幾天,現在我似乎無法弄清楚。Laravel:未定義的索引 - 陣列鍵不存在

我想做一些簡單的,我想,只是循環通過一個數組。 這是陣列的截圖:http://cl.ly/image/3j2J3x1C3B0j 我通過所有的「技能」陣列試圖循環,出現「技能'陣列和內部的抓住了‘圖標’ 對於這個我。由2個循環:

foreach ($hero_data['skills'] as $skills) 
      { 
       foreach ($skills as $skill) 
      { 
       //print_r($skill['skill']); 
      } 
    } 

Unfortunaly這不起作用,在laravel我發現了「未定義指數:技能」。錯誤它的工作時,我試了一下之外,作爲一個獨立的腳本

兩邊的廁所PS我可以選擇用圖標:

print_r($hero_data['skills']['active'][0]['skill']['icon']); 

我敢肯定,我俯瞰一些愚蠢的事......

非常感謝您的幫助,

+0

你可以發佈完整的'$ hero_data'數組嗎?您可能循環了沒有所需鍵的元素,但它們在屏幕截圖中不可見。 – BadHorsie

回答

1

你都從這裏張貼的其他解決方案所說的來看,很顯然,你是通過子陣列循環,而不是所有的子陣列包含您進一步的循環是關鍵尋找。

試試這個:

foreach ($hero_data['skills']['active'] as $skills) { 
    if (isset($skills['skill']['icon'])) { 
     print_r($skills['skill']['icon']); 
    } 
} 

,因爲,例如,如果$hero_data['skills']['active'][8]實際上並沒有一個skill陣列或['skill']['icon']陣列進一步下跌,則循環會扔你最近一直在報道中的錯誤。

你正在尋找的嵌套數組鍵必須沒有失敗的循環的每一次迭代中找到,或者你要插入一個條款,跳過這些數組元素,如果他們沒有找到。看起來您的$hero_data陣列的零件沒有['skill']['icon'],因此請嘗試在循環中插入一個或多個isset()檢查。否則,您需要找到一種方法來保證您的陣列的完整性。

你的遊戲看起來很有趣!

+0

修正了這個問題,謝謝你的出色解釋,我現在明白了,希望不要再犯這個錯誤了:)再次感謝! –

+0

噢,是的,這是從Diablo 3 API檢索的數據。 :) –

0

裏面的技能,你有一個「活躍「屬性,它包含了你所需要的數組,所以你需要對你的代碼改成這樣:

foreach ($hero_data['skills'] as $skills) 
      { 
       foreach ($skills['active'] as $skill) 
      { 
       //print_r($skill['skill']); 
      } 
    } 
+0

這樣做時,我得到「未定義索引:活動」。 :( –

0

嘗試:

foreach ($hero_data['skills'] as $skills) 
{ 
    foreach ($skills as $skillState) 
    { 
    foreach ($skillState as $skill) 
    { 
     print_r($skill['skill']); 
    } 
    } 
} 
+0

使用此代碼時出現同樣的錯誤。這很奇怪,這是行不通的:/ –

0

您只需重複數組的活動索引。這應該工作:

foreach ($hero_data['skills']['active'] as $skills) { 
    print_r($skills['skill']['icon']); 
} 
+0

這段代碼有相同的「未定義索引:技能」錯誤。 :( –