在数组中捕获未定义的索引并创建它

时间:2010-07-21 10:49:14

标签: php arrays

<h1><?php echo $GLOBALS['translate']['About'] ?></h1>
Notice: Undefined index: About in page.html on line 19

是否可以“捕获”未定义的索引,以便我可以创建它(数据库查找)&amp;从我的函数返回它,然后执行echo?

6 个答案:

答案 0 :(得分:7)

检查是否已分配值的最简单方法是使用isset方法:

if(!isset($GLOBALS['translate']['About'])) {
    $GLOBALS['translate']['About'] = "Assigned";
}
echo $GLOBALS['translate']['About'];

答案 1 :(得分:2)

您可以在访问之前检查此特定索引是否存在。请参阅isset()上的手册。这有点笨拙,因为你必须两次写变量名。

if( isset($GLOBALS['translate']['About']) )
    echo $GLOBALS['translate']['About'];

您可能还会考虑更改生产环境的error_reporting值。

答案 2 :(得分:1)

这不是正确的做法。我会努力正确地构建阵列。否则,每页最终会有1000个db请求。

另外,你应该在输出之前检查数组,并在那里放一个默认值:

<h1><?php echo isset($GLOBALS['translate']['About'])?$GLOBALS['translate']['About']:'default'; ?></h1>

答案 3 :(得分:0)

是。使用isset确定是否定义了索引,如果不定义,则可以为其分配值。

if(!isset($GLOBALS['translate']['About'])) {
    $GLOBALS['translate']['About'] = 'foo';
    }
echo "<h1>" .  $GLOBALS['translate']['About'] . "</h1>";

答案 4 :(得分:0)

尝试类似:

if ( !isset($GLOBALS['translate']['About']) )
{
    $GLOBALS['translate']['About'] = get_the_data('About');
}
echo $GLOBALS['translate']['About'];

答案 5 :(得分:0)

如果要捕获未定义索引

,则需要定义自定义错误处理程序
set_error_handler('exceptions_error_handler');

function exceptions_error_handler($severity, $message, $filename, $lineno) {
  if (error_reporting() == 0) {
    return;
  }
  if (error_reporting() & $severity) {
    throw new ErrorException($message, 0, $severity, $filename, $lineno);
  }
}
try{
}catch(Exception $e){
 echo "message error";
}