0

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

使用下面的脚本,这完全可以正常工作,但是,如果文本字段留空,则选择菜单会向我显示以下错误消息:

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

在第/opt.php373 行的文件中:

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

谢谢你。

4

3 回答 3

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;
    }
}
于 2012-12-20T03:32:22.690 回答
2

if(empty($decode)) {

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

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

可能会更好。

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

$item_family_trunc =  str_replace(' ','+',$value['family']);
于 2012-12-20T03:34:33.527 回答
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']可用。

于 2012-12-20T03:36:00.253 回答