Php 如何使用“拆分”拆分字符-&引用;性格
我用php生成了一个序列号,这个序列号的长度是16个字符,我想用破折号(-)字符将这个序列号拆分成4个字符,就像这种格式XXXXXXXXXXXXXXXXXXXX,所以我写了这个php代码:Php 如何使用“拆分”拆分字符-&引用;性格,php,function,split,Php,Function,Split,我用php生成了一个序列号,这个序列号的长度是16个字符,我想用破折号(-)字符将这个序列号拆分成4个字符,就像这种格式XXXXXXXXXXXXXXXXXXXX,所以我写了这个php代码: for ($d=0; $d<=3; $d++){ $tmp .= ($tmp ? "-" : null).substr($serial,$d,4); } 对于($d=0;$d我将使用和: str_split()将字符串拆分为一个数组,其中每个元素有4个字符。然后,infrade()用破折号将
for ($d=0; $d<=3; $d++){
$tmp .= ($tmp ? "-" : null).substr($serial,$d,4);
}
对于($d=0;$d我将使用和:
str_split()
将字符串拆分为一个数组,其中每个元素有4个字符。然后,infrade()
用破折号将这些数组片段连接在一起
因此,如果我们生成一个随机的$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
参考:您可以尝试使用以下工具:
str_split,相当清楚。。。
这是很清楚的,但生成一个数组只是为了使其内爆似乎有点浪费。所以我想知道是否有其他方法
更换preg_后速度更快?
我尝试了一个正则表达式,认为这样就不需要中间数组了。毕竟,既然可以,为什么还要有一个问题呢
这只小野兽寻找4个字符,只要后跟至少一个字符,就会在后面插入斜杠
问题是,结果是速度慢了25%左右:(
chunk_分裂得更快,而且有着同样的薄荷味!
Prasanth Bendra给出了一个非常有效的答案,不需要中间数组
$hyphenated=substr(chunk_split($str, 4, '-'), 0, -1);
结果!这比在16个字符的输入字符串上使用str_split至少快25%,并且与str_split方法一样清晰。您真的需要substr()吗调用那里?是的,否则在+1结尾将出现-
,这实际上是最快的方法,因为没有创建中间数组。使用chunk\u split比str\u split快40%左右,经过100000次迭代和16个字符的字符串测量。
$tmpArray = str_split($tmp, 4);
$serialNumber = implode('-', $tmpArray);
$hyphenated = implode( '-', str_split( $str, 4));
$hyphenated = preg_replace('/(.{4})(?=.)/', '$1-', $str);
$hyphenated=substr(chunk_split($str, 4, '-'), 0, -1);