我有一个函数,可以从数据库对数组执行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;
}
如果可能的话,就像说“没有团队选择”并停止。
答案 0 :(得分: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/>";
//...
}
}
您也可以从PHP 7.1开始检查is_iterable
。
答案 1 :(得分:2)
if ($array) {
foreach ($array as $k => $v) {
...
}
} else {
echo 'No team selected';
// exit from loop
}
退出循环将是“返回”,或“中断”(n是要破解的级别)或继续...这取决于您的逻辑。
答案 2 :(得分:1)
if ($value !== null && count($value) >= 3) {
$teamgo .= $value[1] . $value[2]
}
答案 3 :(得分:1)
&lt;在这里插入困惑的笑脸&gt;
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]
}
}
这是吗?
答案 4 :(得分:1)
如果$teamarray
实际上是一个数组,请做一个测试:
if (is_array($teamarray)) {
foreach ($teamarray as $key => $value) {
// …
}
}
答案 5 :(得分:1)
或者你可以这样做:
$teamarray = isset($teamarray) ? $teamarray : array();
在循环之前,在一个漂亮整齐的行中,它将确保您将变量设置为空数组,这将导致它跳过foreach()
。