PHP - 警告:为foreach()提供的无效参数

问题描述:

我正在创建一个动态列表,可以在我的一个页面上的选择菜单中选择字体,链接到文本字段。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

确保了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; 
    } 
} 

的阵列

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

您需要确保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']可用。