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

PHP-警告:中为foreach()提供的参数无效,php,Php,我正在创建一个字体的动态列表,以便在我的一个页面上的选择菜单中进行选择,并链接到一个文本字段 使用下面的脚本,这可以很好地工作,但是,如果文本字段留空,则“选择”菜单会显示以下错误消息: 警告:中为foreach()提供的参数无效 /opt.php在线 373 在第373行的/opt.php文件中: else { foreach ($decode['items'] as $key => $value) { $item_family = $decode['items'

我正在创建一个字体的动态列表,以便在我的一个页面上的选择菜单中进行选择,并链接到一个文本字段

使用下面的脚本,这可以很好地工作,但是,如果文本字段留空,则“选择”菜单会显示以下错误消息:

警告:中为foreach()提供的参数无效 /opt.php在线 373

在第373行的
/opt.php
文件中:

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新手,如何修复上述脚本,以便在文本字段留空时不再收到错误消息


谢谢。

使用
is\u array()
函数确保
foreach
循环的参数是数组

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;
    }
}

使用
is\u array()
函数,确保
foreach
循环的参数是数组

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;
    }
}

您只是检查$decode是否为空,而不是检查它是否设置了“items”

if (!isset($decode['items']) && is_array($decode['items'])) {
也许会更好

此外,在foreach循环中,您可以只引用$value,而不是尝试遍历数组。所以

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

您只是检查$decode是否为空,而不是检查它是否设置了“items”

if (!isset($decode['items']) && is_array($decode['items'])) {
也许会更好

此外,在foreach循环中,您可以只引用$value,而不是尝试遍历数组。所以

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

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

您需要确保
decode['items']
是一个数组,而不是空的:

$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']
可用。

$decode['items']
数组吗?是否可以转储('decode['items');略高于373?检查数据是否打印($decode);这是相关侧栏中每个问题的副本。请,请在创建问题时查看推荐的相关问题。创建问题时,有两个列表。第一个是在题目和正文之间,第二个是大的、胖的、橙色的,在题目正文的右边。不,这不一样@Charles。谢谢你,
$decode['items']
是一个数组吗?你能把($decode['items'])倒出来吗;略高于373?检查数据是否打印($decode);这是相关侧栏中每个问题的副本。请,请在创建问题时查看推荐的相关问题。创建问题时,有两个列表。第一个是在题目和正文之间,第二个是大的、胖的、橙色的,在题目正文的右边。不,这不一样@Charles。谢谢您,不过…
isset()&&is_array()
将检查变量是否存在,如果存在,则将检查它是否为数组
是数组()
只会检查
$decode['items']
是否是数组。这实际上只是一个回退。
isset()&&is\u array()
将检查变量是否存在,如果存在,则检查它是否是数组
是数组()
只会检查
$decode['items']
是否是数组。这只是一个退路,真的。