【发布时间】:2008-11-20 05:16:28
【问题描述】:
假设我有一个由 16 个数字字符组成的字符串(即 0123456789012345),在 PHP 中将其划分为多个集合的最有效方法是:0123-4567-8901-2345?
注意:我正在重写一个非常缓慢的现有系统。
【问题讨论】:
假设我有一个由 16 个数字字符组成的字符串(即 0123456789012345),在 PHP 中将其划分为多个集合的最有效方法是:0123-4567-8901-2345?
注意:我正在重写一个非常缓慢的现有系统。
【问题讨论】:
使用str_split():
$string = '0123456789012345';
$sets = str_split($string, 4);
print_r($sets);
输出:
Array
(
[0] => 0123
[1] => 4567
[2] => 8901
[3] => 2345
)
然后当然要在集合之间插入连字符,您只需 implode() 将它们放在一起:
echo implode('-', $sets); // echoes '0123-4567-8901-2345'
【讨论】:
如果您正在寻找更灵活的方法(例如电话号码),请尝试正则表达式:
preg_replace('/^(\d{4})(\d{4})(\d{4})(\d{4})$/', '\1-\2-\3-\4', '0123456789012345');
如果您看不到,第一个参数接受四组,每组四位数。第二个参数格式化它们,第三个参数是你的输入。
【讨论】:
这有点笼统:
<?php
// arr[string] = strChunk(string, length [, length [...]] );
function strChunk() {
$n = func_num_args();
$str = func_get_arg(0);
$ret = array();
if ($n >= 2) {
for($i=1, $offs=0; $i<$n; ++$i) {
$chars = abs( func_get_arg($i) );
$ret[] = substr($str, $offs, $chars);
$offs += $chars;
}
}
return $ret;
}
echo join('-', strChunk('0123456789012345', 4, 4, 4, 4) );
?>
【讨论】: