2012-12-20 63 views
0

我正在創建一個動態列表,可以在我的一個頁面上的選擇菜單中選擇字體,鏈接到文本字段。PHP - 警告:爲foreach()提供的無效參數

使用下面的腳本,這個工作完全正常,但是,如果文本字段爲空,選擇菜單顯示我此錯誤消息:

警告:無效的參數提供了的foreach ()中的線

在上線/opt.php文件 /opt.php 373:

else { 
    foreach ($decode['items'] as $key => $value) { 
     $item_family = $decode['items'][$key]['family']; 
     $item_family_trunc = str_replace(' ','+',$item_family);   
     $default[$item_family_trunc] = $item_family; 
    } 
}  

由於我是新來的PHP,我將如何能夠解決上面的腳本,這樣當文本字段爲空,我不再收到錯誤消息?

謝謝。

+0

373哪裏? –

+0

'$ decode ['items']'是一個數組嗎? – Sean

+0

can var_dump($ decode ['items']);剛剛超過373? – user1190992

回答

2

確保了foreach循環參數是通過使用is_array()功能

if (isset($decode['items']) && is_array($decode['items'])) { 
    foreach ($decode['items'] as $key => $value) { 
     $item_family = $decode['items'][$key]['family']; 
     $item_family_trunc = str_replace(' ','+',$item_family);   
     $default[$item_family_trunc] = $item_family; 
    } 
} 
2

的陣列

if(empty($decode)) { 

你只檢查$解碼是否爲空,而不是是否它有'項目'設置。

if (!isset($decode['items']) && is_array($decode['items'])) { 

可能會更好。

也在您的foreach循環中,您可以引用$值而不是嘗試遍歷數組。所以..

$item_family_trunc = str_replace(' ','+',$value['family']); 
+1

'isset()&& is_array()'將檢查變量是否存在,如果是,則檢查它是否是數組。 'is_array()'只會檢查'$ decode ['items']'是否是一個數組。這真的只是一個回退。 – qooplmao

2

您需要確保decode['items'] isset,是一個數組,而不是空:

$decode = json_decode($json, true); 
if(empty($decode)) { 

}elseif(isset($decode['items']) && !empty($decode['items']) && is_array($decode['items'])){ 
      foreach ($decode['items'] as $key => $value) { 
      $item_family = $decode['items'][$key]['family']; 
      $item_family_trunc = str_replace(' ','+',$item_family);   
      $default[$item_family_trunc] = $item_family; 

     } 
    } 
} 

與您的代碼的問題是,有可能是$decode不爲空(錯誤信息等),因此您需要確保$decode['items']可用。

相關問題