2009-11-09 139 views
0

我有一个函数,它执行数据库中的数组的foreach循环。PHP foreach函数中的错误处理

看到foreach ($teamarray AS $key => $value){$teamgo .= $value[1]." ".$value[2]."<br/>";

问题是,有时可能没有数据集,当环路击中该字段,它引发错误。

我该如何捕捉/压制这个错误?

function GetUnsubmitted($coach){ 
    $push .= "<div id=unsubmitted><h2>Check which event/teams you want to process and click submit</h2>"; 
    $push .= "<form action=\"submit.php\" method=POST>"; 
    $result = mysql_query("SELECT * FROM `ptable` WHERE coach = '$_SESSION[username]' AND status = '1' ORDER BY status ASC") or trigger_error(mysql_error()); 
    while($row = mysql_fetch_array($result)){ 
    foreach($row AS $key => $value) { $row[$key] = stripslashes($value); } 
    $id = $row['id']; 
    $teampre = $row['team']; 
    $eventpre = $row['event']; 
    $statuspre = $row['status']; 
    $eventarray = DecodeEvent($eventpre); 
    $event = $eventarray[0]; 
    $cat = $eventarray[1]; 
    $subcat = $eventarray[2]; 
    $division = $eventarray[3]; 
    $type = $eventarray[4]; 

    $teamarray = DecodeTeam($teampre); 

    $price = GetPrice($type, "nat"); 
    $teamcount = count($teamarray); 
    $total = $price * $teamcount; 

    $teamgo = ""; 

    foreach ($teamarray AS $key => $value){ 
     $teamgo .= $value[1]." ".$value[2]."<br/>"; 

     if($statuspre == "1"){ 
     $statuscolor = "#FFCC99"; 
     $statusmsg = "unsubmitted <a href=delsub.php?id=$id onClick=\"return confirm('Are you sure you want to delete this submission?');\"><img src=images/del.png border=0 />"; 
     } elseif($statuspre == "2"){ 
     $statuscolor = "#FFCC66"; 
     $statusmsg = "awaiting confirmation"; 
     } elseif($statuspre == "3"){ 
     $statuscolor = "#66CC66"; 
     $statusmsg = "confirmed"; 
     } 
    } 
    $push .= "<div id=submission><div id=event style=\"background-color:$statuscolor;\"><h1>$event</h1><span id=status>$statusmsg</span></div><div id=subinfo><a href=\"#\" onClick=\"if($(this).next('div').css('display') == 'none') { $(this).next('div').show('fast'); } else { $(this).next('div').hide('fast'); } return false;\"><span id=dropdown><img src=images/expand.png border=0></span><h2>$cat >> $subcat >> $division >> $type</h2></a> <div id=team style=\"display:none;\">$teamgo<br />$price - $total<div id=controls></div></div></div></div>"; 
    $pid .= $id; 
    $rtotal .= "$total,"; 
    } 


    $stotal = explode(",", $rtotal); 
    $gtotal = array_sum($stotal); 

    $push .= "<div style=\"text-align:right;\"><div id=total>Total - <em>$gtotal</em></div><br><input type=image src=images/paynow.png alt=\"Pay Now\"></form> <a href=submit2.php?$pid&$pidarray><img src=images/mailfax.png width=138px height=41px border=0></a></div></div>";  

    return $push; 
} 

如果可能的话就像它说“没有团队选择”并停止。

回答

2
if ($array) { 
    foreach ($array as $k => $v) { 
     ... 
    } 
} else { 
    echo 'No team selected'; 
    // exit from loop 
} 

你从循环中退出将是一个“返回”,或一个“休息n”(n是要破的水平)或继续......这取决于你的逻辑。

1
if ($value !== null && count($value) >= 3) { 


$teamgo .= $value[1] . $value[2] 
} 
4

你可以这样写:

foreach ((array)$teamarray as $key => $value) { 
    $teamgo .= $value[1] . " " . $value[2] . "<br/>"; 
    //... 
} 

的foreach预计阵列。所以,真正正确的方法是,以确保您处理阵列之前尝试迭代,就像这样:

if (is_array($teamarray) && count($teamarray)) { 
    foreach ((array)$teamarray as $key => $value) { 
     $teamgo .= $value[1] . " " . $value[2] . "<br/>"; 
     //... 
    } 
} 

您还可以检查is_iterable因为PHP 7.1。

1

<插入疑惑的笑脸在这里>

foreach($row AS $key => $value) { 
    if ($value) { 
     $row[$key] = stripslashes($value); 
    } 
} 

和:

foreach ($teamarray AS $key => $value){ 
    if ($value && sizeof($value) > 2) { 
     $teamgo .= $value[1] . $value[2] 
    } 
} 

是这个吗?

1

只是做一个测试,如果$teamarray实际上是一个数组:

if (is_array($teamarray)) { 
    foreach ($teamarray as $key => $value) { 
     // … 
    } 
} 
1

或者你可以这样做:

$teamarray = isset($teamarray) ? $teamarray : array(); 

之前,为了在一个不错的阵容整齐的循环,这将确保你有变量设置为一个空数组,这会导致它跳过foreach()