看起来很多人都不明白这个问题,通知 我得到的不是$ 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手册说但是为什么在将元素附加到未初始化的数组时会出现错误?
答案 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());