首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何分割字符与"-“字符?

如何分割字符与"-“字符?
EN

Stack Overflow用户
提问于 2013-07-25 12:18:40
回答 4查看 166关注 0票数 0

我用php生成了一个序列号,这个序列号的长度是16个字符,我想用破折号(-)字符将这个序列号分割成4个字符,比如xxxx xxxx格式,所以我编写了这个php代码:

代码语言:javascript
复制
for ($d=0; $d<=3; $d++){
     $tmp .= ($tmp ? "-" : null).substr($serial,$d,4);
}

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

我想知道在php中有没有更好的方法或功能?

我在网上搜索,我找到了sprintfnumber_format,但是我不知道如何使用这个函数来实现这种格式!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-07-25 12:22:25

我会用str_split()implode()

代码语言:javascript
复制
$result = implode( '-', str_split( $serial, 4));

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

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

代码语言:javascript
复制
$serial = substr(md5(uniqid(rand(), true)), 0, 16);

我们将获得类似于以下内容的as输出

代码语言:javascript
复制
59e6-997f-8446-80a2 
票数 7
EN

Stack Overflow用户

发布于 2013-07-25 12:23:04

试试这个:

代码语言:javascript
复制
$str   = "xxxxxxxxxxxxxxxx";
echo substr(chunk_split($str, 4, '-'), 0, -1); 

产出:

代码语言:javascript
复制
xxxx-xxxx-xxxx-xxxx

参考文献:http://www.php.net/manual/en/function.chunk-split.php

票数 4
EN

Stack Overflow用户

发布于 2013-07-25 12:27:32

str_split,很清楚.

代码语言:javascript
复制
$hyphenated = implode( '-', str_split( $str, 4));

这是相当清楚的,但是只生成一个数组来实现它似乎是一种浪费。所以我想知道有没有别的办法..。

用preg_replace更快?

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

代码语言:javascript
复制
$hyphenated = preg_replace('/(.{4})(?=.)/', '$1-', $str);

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

问题是,事实证明它慢了25%左右:

chunk_split更快,也有同样的薄荷味!

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

代码语言:javascript
复制
$hyphenated=substr(chunk_split($str, 4, '-'), 0, -1); 

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17857843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档