我有以下php代码,它正在查找mysql查询结果中测试条目的最后一个条目。PHP foreach通过数组两次导致一些警告undefined index
它检查最后一个条目是否对某个设备有效,或者它试图在该类型的测试中搜索最新的条目(或者失败时将其保留为未测试)。之后,它以相同的方式为第二个设备执行相同的操作。但是,我得到的错误指向第二个foreach循环上的行。
if ($device1_valid) {
$Results_d1 = $History[$TestNo][$iter]['Results_d1'];
$Colour_d1 = Colour($Results_d1);
$Date_d1 = $History[$TestNo][$iter]['Date_'];
} else {
foreach ($History[$TestNo]['iter'] as $item) {
$device1_valid = $History[$TestNo][$item]['d1_valid'];
if ($sf1_valid) {
$Results_d1 = $History[$TestNo][$item]['Results_d1'];
$Colour_d1 = Colour($Results_d1);
$Date_d1 = $History[$TestNo][$item]['Date_'];
break;
} else {
$Results_d1 = "----";
$DateTime_d1 ="----";
$Colour_d1 = 'white';
}
}
}
unset($item);
if ($device2_valid) {
$Results_d2 = $History[$TestNo][$iter]['Results_d2'];
$Colour_d2 = Colour($Results_d2);
$Results_d2 = $History[$TestNo][$iter]['Results_d2'];
$Date_d2 = $History[$TestNo][$iter]['Date_'];
} else {
foreach ($History[$TestNo]['EntryNo'] as $item) {
$device2_valid = $History[$TestNo][$item]['d2_valid'];
if ($device2_valid) {
$Results_d2 = $History[$TestNo][$item]['Results_d2'];
$Colour_d2 = Colour($Results_d2);
$Date_d2 = $History[$TestNo][$item]['Date_'];
break;
} else {
$Results_d2 = "----";
$DateTime_d2 ="----";
$Colour_d2 = 'white';
}
}
这导致警告,第二圈为这样:
Notice: Undefined index: EntryNo in /server/filename.php on line 129
Warning: Invalid argument supplied for foreach() in /server/filename.php on line 129
为什么发生这个错误,我怎么就能去除呢?该查询不会导致正确的数据(这是后来显示的,但我不明白为什么论文的通知和警告都发生这只是发生在第二foreach循环,而不是第一
编辑:。
$History[$TestNo]
是一个多维数组....所以vardump给array(49) { [0]=> array(25) {....} [1]=> array(25) [2]=> array(25){...}
等我把这个功能设置$ EntryNo 0
vardump $History[$TestNo][$EntryNo]
只是给array(25) {....}
有在第一循环,但第二循环中没有警告它说指数未定义。这是为什么另一个问题确定为重复的问题不能解决我的问题的关键原因。问题是为什么在第二个foreach循环中发生这种情况,以及如何避免这种情况。
[PHP:“Notice:Undefined variable”和“Notice:Undefined index”]的可能重复(http://stackoverflow.com/questions/4261133/php-notice-undefined-variable-and-notice-undefined-索引) – Epodax
我不明白如果没有设置EntryNo,那么为什么错误不会发生在第一个foreach循环。 – Umar