使用PHP计算数组数据中的整数区间

时间:2016-02-28 19:09:40

标签: php arrays

我编写了一个代码,该代码使用查询中的值匹配数组中的值,并返回每个值的数组键。

这是数组:

$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>

0 个答案:

没有答案