处理未定义索引和E_NOTICE的分配

时间:2015-11-05 15:22:49

标签: php error-handling

  

看起来很多人都不明白这个问题,通知   我得到的不是$ fromdatabase,它关于$ data [$ key]

因为我可以在开发环境中看到我从$ Database [$ key]获得的内容,并且错误消息是针对该行:$ data [$ key] = $ this-> getSomeValue($ value);

  

即使我执行$ data [' mykey']我收到消息undefined index mykey

我有一种情况需要为关联数组的未定义索引分配一些值。像这样:

$data = array (  );

foreach ( $something as $key => $value)
{
    /** If I do this then there is no notice **/
    $data['body'][$key] = NULL;

    foreach ( $fromDatabase as $xyz)
    {
        $data['body'][$key] = $this->getSomeValue ($xyz);
    }
}

$fromDatabase未知且$key无法预先预测,所有这些都是动态的。

在这种情况下如何处理E_NOTICE(未定义的索引)?

  

如果使用未初始化的情况,则会发出E_NOTICE级别错误   变量,但不是在附加元素的情况下   未初始化的数组。 isset()语言构造可用于检测   如果变量已经初始化。

PHP手册说但是为什么在将元素附加到未初始化的数组时会出现错误?

1 个答案:

答案 0 :(得分:1)

您只需要确保$fromDatabase存在并且是一个数组,其余的就可以了。

如果

$data[$key]不存在,则会创建$key并自动设置$value

$data = array (  );

if (isset($fromDatabase) && is_array($fromDatabase))
    foreach ( $fromDatabase as $key => $value )
    {
        $data[$key] = $this->getSomeValue ($value); // You made a typo "key" => "$key"
    }

编辑:我无法重现您的错误

$fromDatabase = ['test' => 1, 42 => 'some strange value'];

$data = array (  );
foreach ( $fromDatabase as $key => $value )
{
    $data[$key] = $value;
}

print_r($data);

输出(对我来说):

Array
(
    [test] => 1
    [42] => some strange value
)

重新编辑:

$data = array (  );

将其更改为

$data = array('body' => array());