我正忙着在线预订系统。用户选择了他/她的所有座位后,保存到我的数据库中的结束字符串如下所示:
SH1,SH2,SH3,SH4,SH6,SH7,SH8,SI1,SI2,SI3,SI4,SI5,SI7,SP1,SP2,SP3,SQ1,SQ2,SQ3,SQ4,A1,A2,A3,A4 ,A5
但我需要把它分解成这样的东西:
SH1-4,SH6-8,SI1-5,SI7,SP1-3,SQ1-4,A1-5
如果有人可以用一个简短的例子来帮助我。
答案 0 :(得分:2)
只是给出一个方向,如何做到。
$str="SH1, SH2, SH3, SH4, SH6, SH7, SH8, SI1, SI2, SI3, SI4, SI5, SI7, SP1, SP2, SP3, SQ1, SQ2, SQ3, SQ4, A1, A2, A3, A4, A5";
foreach(explode(', ',$str) as $substr){
preg_match('#([A-Z]+)([0-9]+)#',$substr,$m);
$coll[$m[1]][]=$m[2];
}
$res=[];
foreach($coll as $char => $nums){
if(count($nums)==1) {
$res[]="{$char}{$nums[0]}";
} else {
foreach($nums as $idx => $num){
if(@$nums[$idx+1]==$num+1){
!@$tmp AND $tmp[0]=$num;
$tmp[1]=$num+1;
} else if($tmp[0]){
$res[]="{$char}{$tmp[0]}-$num";
$tmp=null;
} else {
$res[]="{$char}{$num}";
}
}
}
}
print implode(', ',$res);
//RESULT: SH1-4, SH6-8, SI1-5, SI7, SP1-3, SQ1-4, A1-5
让这段代码无法安全,就在你身上......