2016-06-21 76 views
0

我有以下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循环中发生这种情况,以及如何避免这种情况。

+1

[PHP:“Notice:Undefined variable”和“Notice:Undefined index”]的可能重复(http://stackoverflow.com/questions/4261133/php-notice-undefined-variable-and-notice-undefined-索引) – Epodax

+0

我不明白如果没有设置EntryNo,那么为什么错误不会发生在第一个foreach循环。 – Umar

回答

2

对于 `说明:未定义指数:EntryNo在/server/filename.php线129 警告:()在/server/filename.php提供的foreach无效参数在线路129'

它必须像这样在foreach($History[$TestNo]['EntryNo'] as $item)排列$History[$TestNo]与密钥EntryNo没有元素。 请问var_dump($ History [$ TestNo])并检查它吗?

Notice: Undefined variable: Colour_sf2 in /server/filename.php on line 184 为此,您没有在这里包含足够的代码,但它必须是因为您在任何函数或条件中使用它之前没有定义$Colour_sf2

+0

为什么这不会发生在第一个foreach循环中? – Umar

+0

执行循环'$ History [$ TestNo] ['EntryNo']'必须是数组并存在。 你能检查一下吗? 如果它不存在,则需要更改整个代码。 –

+0

是的,这是正确的。 – purvik7373