如何避免“未定义的索引”错误?

9 浏览
0 Comments

如何避免“未定义的索引”错误?

这个问题已经有了答案

\"Notice: Undefined variable\", \"Notice: Undefined index\", \"Warning: Undefined array key\", and \"Notice: Undefined offset\" using PHP

我正在处理之前开发人员所写的一些代码。我对PHP还是比较新手,所以我想知道这个问题是否有任何常见的模式或解决方案。

基本上,原始作者在尝试使用它们之前不检查任何数组索引。我知道我可以使用isset()在使用之前检查每个索引,但现在有很多行出现这些错误。在我把音乐放大声后开始把头撞到键盘之前,我想确保没有一些方便的快捷方式来处理这个问题。这是我在看的代码段:

    /* snip */
"text" => $link . $top_pick_marker . $output['author'] . " " .  " " . 
                              $output['new_icon'] . $output['rec_labels'] . "   " 
                    . $output['admin_link']
                    . $output['alternate_title'] 
                    . $output['access_info'] 
                    . $output['description'] 
                    . $output['url']
                    . $output['subject_terms'] 
                    . $output['form_subdivisions'] 
                    . $output['dates_of_coverage']  
                    . $output['update_frequency']  
                    . $output['place_terms'],
    /* snip */

我知道我可以在这里使用isset()检查每个项。我需要稍微重新排列一下并删除所有连接,因为它现在是这样的。还有其他简单的方法吗,还是我被卡住了?

admin 更改状态以发布 2023年5月21日
0
0 Comments

你可以使用isset()函数来进行拼接而不会丢失内容:

//snip
$str = 'something'
 . ( isset($output['alternate_title']) ? $output['alternate_title'] : '' )
 . ( isset($output['access_info']) ? $output['access_info'] : '' )
 . //etc.

你也可以编写一个函数来返回一个已设置的字符串 - 这可能不是非常高效:

function getIfSet(& $var) {
    if (isset($var)) {
        return $var;
    }
    return null;
}
$str = getIfSet($output['alternate_title']) . getIfSet($output['access_info']) //etc

你不会得到任何通知,因为这个变量是通过引用传递的。

0
0 Comments

找出$output数组中的键,将缺失的键用空字符串填充。

$keys = array_keys($output);
$desired_keys = array('author', 'new_icon', 'admin_link', 'etc.');
foreach($desired_keys as $desired_key){
   if(in_array($desired_key, $keys)) continue;  // already set
   $output[$desired_key] = '';
}

0