如何用“-";性格


How to split characters with "-" character?

我用php生成了一个序列号,这个序列号的长度是16个字符,我想用短划线(-)字符将这个序列号拆分为4个字符,就像这种格式xxxx-xxxx-xxx-xxxx,所以我写了这个php代码:

for ($d=0; $d<=3; $d++){
     $tmp .= ($tmp ? "-" : null).substr($serial,$d,4);
}

所以这个循环将返回一个xxxx-xxxx-xxx-xxxx格式的序列号,

我想知道php中有什么更好的方法或功能吗?

我在网上搜索了一下,找到了sprintfnumber_format,但我不知道如何将此功能用于这种格式!

我会使用str_split()implode():

$result = implode( '-', str_split( $serial, 4));

str_split()将字符串分解为一个数组,其中每个元素有4个字符。然后,implode()用破折号将这些数组片段连接在一起。

因此,如果我们用生成一个随机$serial

$serial = substr(md5(uniqid(rand(), true)), 0, 16);

我们会得到类似于的输出

59e6-997f-8446-80a2 

试试这个:

$str   = "xxxxxxxxxxxxxxxx";
echo substr(chunk_split($str, 4, '-'), 0, -1); 

输出:

xxxx-xxxx-xxxx-xxxx

参考编号:http://www.php.net/manual/en/function.chunk-split.php

str_split,相当清楚

$hyphenated = implode( '-', str_split( $str, 4));

这很清楚,但生成一个数组却导致它内爆似乎有点浪费。所以我想知道是否还有其他方法。。。

preg_replace更快

我尝试了一个正则表达式,认为这将消除对中间数组的需要。毕竟,为什么有一个问题,而你可以有两个!

$hyphenated = preg_replace('/(.{4})(?=.)/', '$1-', $str);

这个小野兽寻找4个字符,只要它们后面至少还有一个字符,就会在它们后面插入一个斜杠。

问题是,它原来慢了25%左右:(

chunk_split更快,有同样的薄荷味

Prasanth Bendra发布了一个非常有效的答案,它不需要中间阵列

$hyphenated=substr(chunk_split($str, 4, '-'), 0, -1); 

结果!这比在16个字符的输入字符串上使用str_split至少快25%,并且与str_splite方法一样清晰。

您可以尝试str_split()和内爆(),例如:

$tmpArray = str_split($tmp, 4);
$serialNumber = implode('-', $tmpArray);