我正在尝试在CodeIgniter环境中工作,在尝试收集并收集一些信息到变量时,我收到了一些似乎不正确的PHP NOTICE错误。
以下是发生错误的代码块:
if (empty($events['user'][$user_id])) {
unset($events['user'][$user_id]);
} else {
foreach ($events['user'][$user_id] as $event) {
$events['user'][$user_id]['events']['event_id'] = $event_id = $event['event_id'];
$events['user'][$user_id]['event']['date'] = $this->events_model->getEventDates($event_id);
$events['user'][$user_id]['event']['date'] = $events['user'][$user_id]['event']['date'][0]['date'];
$events['user'][$user_id]['event']['request_title'] = $event['request_title'];
$events['user'][$user_id]['event']['event_status_text'][] = $this->events_model->getEventStatusFromSectionStatuses($event_id);
$request_data = $this->requests_model->getRequestInfo($event['request_id']);
$events['user'][$user_id]['event']['ministry'] = $this->ministries_model->getMinistryTitle($request_data[0]['requesting_ministry']);
// more stuff will go here...
}
$content_data['event_status_text'] = $events['user'][$user_id]['event_status_text'];
$content_data['events'] = $events['user'][$user_id]['complete_events'];
$content_data['totals'] = $events['user'][$user_id]['totals'];
$content_data['updated_events'] = $events['user'][$user_id]['updated_events'];
}
第一个错误的特定行是foreach循环内以['date'][0]['date']
结尾的第三行。这是PHP告诉我的[0]
未定义。但是,如果我像这样回应完全相同的变量:
echo $events['user'][$user_id]['event']['date'][0]['date'];
...它会输出一个预期的值,这也告诉我[0]
毕竟不是未定义的。我实际上并没有改变变量。唯一的区别是我正在回应它,而不是将它分配给另一个变量。
如果我在这里使用@忽略它,它会在以getMinistryTitle($request_data[0]['requesting_ministry'])
结尾的行后再发生几行。
这是请求的getEventDates()代码(注意这不是我的代码):
function getEventDates($event_id)
{
$sql = "SELECT date FROM `event_dates` WHERE event_id=? ORDER BY date";
$res = $this->db->query($sql, array($event_id));
return $res->result_array();
}
如果我打印出$this->events_model->getEventDates($event_id)
,我会得到以下内容:
Array
(
[0] => Array
(
[date] => 2014-05-01
)
[1] => Array
(
[date] => 2014-05-08
)
[2] => Array
(
[date] => 2014-05-15
)
[3] => Array
(
[date] => 2014-05-22
)
[4] => Array
(
[date] => 2014-05-29
)
[5] => Array
(
[date] => 2014-06-05
)
[6] => Array
(
[date] => 2014-06-12
)
)
嗯...是否可能发生此错误,因为[0]中没有包含直接值,而是另一个数组级别?请注意,我没有构造此输出。其他人对此进行了编码,我的工作就是进入并使用它。
答案 0 :(得分:0)
如果没有看到你的其余代码,这就令人困惑:
$events['user'][$user_id]['event']['date'] = $this->events_model->getEventDates($event_id);
$events['user'][$user_id]['event']['date'] = $events['user'][$user_id]['event']['date'][0]['date'];
为什么要在一行中设置$events['user'][$user_id]['event']['date']
然后在下一行中再次覆盖它?
我最好的建议是在独立于数组的变量中设置第一个赋值,然后为数据调用该变量:
$event_dates_temp = $this->events_model->getEventDates($event_id);
$events['user'][$user_id]['event']['date'] = $event_dates_temp[0];
并且可能添加条件检查以确保您正在设置存在的东西:
$event_dates_temp = $this->events_model->getEventDates($event_id);
if (array_key_exists(0, $event_dates_temp)) {
$events['user'][$user_id]['event']['date'] = $event_dates_temp[0];
}
另外,目前还不清楚你在做什么:
echo $events['user'][$user_id]['event']['date'][0]['date'];
当您像这样进行转储时输出是什么:
echo '<pre>';
print_r($events['user'][$user_id]['event']['date']);
echo '</pre>';
答案 1 :(得分:0)
当您尝试访问未为该索引设置的值时会发生这种情况,请read this link获取更多信息。
有两种选择:
error_reporting(E_ALL ^ E_NOTICE);
来忽略这些通知,但通过添加检查是否存在值来修复此错误是一个好习惯。isset
函数修复值,以查看值/索引是否包含任何数据。答案 2 :(得分:0)