如何拆分星期几的缩写?
How to split abbreviated days of the week?
我正在尝试拆分字符串 MTWTHFS
(星期几)并将其存储为数组。
我试过 str_split()
,但它也会在星期四拆分 T
和 H
。
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',
)
对于出于任何原因希望使用非正则表达式方法的任何人,这将执行相同的操作:
$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);
我正在尝试拆分字符串 MTWTHFS
(星期几)并将其存储为数组。
我试过 str_split()
,但它也会在星期四拆分 T
和 H
。
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',
)
对于出于任何原因希望使用非正则表达式方法的任何人,这将执行相同的操作:
$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);