PHP将字符串分解为更小的外形

时间:2016-09-05 13:20:19

标签: php

我正忙着在线预订系统。用户选择了他/她的所有座位后,保存到我的数据库中的结束字符串如下所示:

  

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

如果有人可以用一个简短的例子来帮助我。

1 个答案:

答案 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

让这段代码无法安全,就在你身上......