如何拆分一周的缩写日期?

时间:2017-06-28 05:42:04

标签: php string validation split days

我尝试拆分字符串MTWTHFS(一周中的几天)并将其存储为数组。

我已尝试str_split(),但它也会在星期四分开TH

if(strpos($days, 'TH') !== false) {
    $withth = str_replace("TH", "" ,$days);
}else{
    $day = str_split($days);
    print_r($day);  
}  

在分割之前,我还尝试先删除字符串中的TH。 如果字符串中没有str_split()TH就可以了。

这是我想要的结果:

array([0]=>'M', [1]=>'T', [2]=>'W', [3]=>'TH', [4]=>'F', [5]=>'S')

有没有更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:2)

我相信会有几种方法可以做到这一点。这是preg_split()

的一种方式

代码:(PHP Demo

$days='MTWTHFS';
$split=preg_split('/.H?\K/',$days,null,PREG_SPLIT_NO_EMPTY);
var_export($split);

输出:

array (
  0 => 'M',
  1 => 'T',
  2 => 'W',
  3 => 'TH',
  4 => 'F',
  5 => 'S',
)

Pattern Demo

对于任何希望出于任何原因使用非正则表达式方法的人,这也是如此:

$days='MTWTHFS';
for($i=0,$k=-1,$len=strlen($days); $i<$len; ++$i){
    if($days[$i]=='H'){
        $split[$k].='H';
    }else{
        $split[++$k]=$days[$i];
    }
}

似乎PHP 5.5并不像模式中的\K。这将提供所需的结果:

$split=preg_split('/(.H?)/',$days,null,PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);