我编写了一个代码,该代码使用查询中的值匹配数组中的值,并返回每个值的数组键。
这是数组:
$roundstotal=mysql_query("SELECT id FROM calendar WHERE eventDate BETWEEN '$season_start' AND '$season_end' AND competition='$compId' AND tag!='T' ORDER BY eventDate ASC", $CONNECTW);
$roundamount=mysql_num_rows($roundstotal);
while($row = mysql_fetch_assoc($roundstotal)) {
$roundsarray[]=$row['id']; }
它返回一个值数组(598,602,607 ...),它们是一年内举行的一系列事件的id。
查询中的值始终与某些数组值匹配,因此我会搜索以匹配相应的键。这告诉我们一个特定的人参加了系列中的第1,第2,第4,第7事件。
$roundinterold=0;
$roundinter=0;
$datarounds=mysql_query("SELECT DISTINCT eventID FROM results WHERE (eventID BETWEEN '$firstevent' AND '$lastevent') AND compId='$compId' AND teamId='$teamid' AND (eventSession='R' OR eventSession='R1' OR eventSession='R2' OR eventSession='R3') AND driverId='$driversource' ORDER BY eventID", $CONNECTW);
while($row=mysql_fetch_row($datarounds))
{
$roundinterold=$roundinter;
$roundid=$row[0];
$rounddisplay = array_search("$roundid",$roundsarray);
$roundinter = $rounddisplay+1;
$roundfinal = "$roundinter";
if (($roundinterold!=0)&&($roundinter==$roundinterold+1)) { $roundfinal=""; }
if (($roundinterold!=0)&&($roundinter!=$roundinterold+1)) { $roundfinal="-$roundinterold, $roundinter"; }
if (($roundinter!=$roundinterold+1)&&($roundinterolder==$roundinterold)) { $roundfinal="$roundinter"; }
if (($roundinterold==0)&&($roundinter!=$roundinterold+1)) { $roundfinal="$roundinter"; }
$roundpack .= "$roundfinal";
}
如果密钥紧跟在前一个密码之后的下一个整数,那么代码的其余部分将被设计为不显示$roundfinal
。这是因为我们的目标是避免这样做:
Events attended: 1,2,3,4,5,6,9,10,11,15,16
但要有这个:
Events attended: 1-6,9-11,15-16
有优雅的方式吗?我目前不得不弄清楚所有可能的情况和排列,但是在孤立事件的情况下它并不容易,并且表明该系列的最终事件,因为没有其他事件我可以用作标记。 / p>