我用php生成了一个序列号,这个序列号的长度是16个字符,我想用破折号(-)字符将这个序列号分割成4个字符,比如xxxx xxxx格式,所以我编写了这个php代码:
for ($d=0; $d<=3; $d++){
$tmp .= ($tmp ? "-" : null).substr($serial,$d,4);
}所以这个循环将返回一个xxxx-xxxx格式的序列号,
我想知道在php中有没有更好的方法或功能?
我在网上搜索,我找到了sprintf和number_format,但是我不知道如何使用这个函数来实现这种格式!
发布于 2013-07-25 12:22:25
我会用str_split()和implode()
$result = implode( '-', str_split( $serial, 4));str_split()会将字符串分解为一个数组,其中每个元素都有4个字符。然后,implode()用一个破折号将这些数组连接在一起。
因此,如果我们生成一个随机的$serial:
$serial = substr(md5(uniqid(rand(), true)), 0, 16);我们将获得类似于以下内容的as输出:
59e6-997f-8446-80a2 发布于 2013-07-25 12:23:04
试试这个:
$str = "xxxxxxxxxxxxxxxx";
echo substr(chunk_split($str, 4, '-'), 0, -1); 产出:
xxxx-xxxx-xxxx-xxxx参考文献:http://www.php.net/manual/en/function.chunk-split.php
发布于 2013-07-25 12:27:32
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_split方法一样清晰。
https://stackoverflow.com/questions/17857843
复制相似问题