如何拆分星期几的缩写?

How to split abbreviated days of the week?

我正在尝试拆分字符串 MTWTHFS(星期几)并将其存储为数组。

我试过 str_split(),但它也会在星期四拆分 TH

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

我也试过在拆分之前先删除字符串中的 TH 。 当字符串中没有 TH 时,str_split() 没问题。

这是我想要的结果:

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

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

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

的一种方式

代码:(PHP Demo)

$days = 'MTWTHFS';
$split = preg_split('/.H?\K/', $days, 0, 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, 0, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);