我想用以下规则格式化给定字符串;
鉴于:1234
预期结果:0000-0000-1234
鉴于:123
预期结果:0000-0000-0123
鉴于:12345
预期结果:0000-0001-2345
鉴于:123456789012345
预期结果:1234-5678-9012
无论如何要实现这一目标而不为其创建方法/功能?例如使用正则表达式和/或使用sprintf
?
答案 0 :(得分:4)
使用str_pad()
格式化全部为零的字符串,chunk_split()
为每4个字符添加-
,substr()
负责限制字符串的长度为14个字符,在最后一个示例中,字符串有16个字符,substr()
修复此问题。
$arr = ['1234', '123', '12345', '123456789012345'];
foreach($arr as $item){
$str = str_pad($item, 12, '0',STR_PAD_LEFT);
echo substr(chunk_split($str, 4, '-'), 0, 14) .'<br>';
}
输出:
0000-0000-1234
0000-0000-0123
0000-0001-2345
1234-5678-9012
答案 1 :(得分:2)
只需使用sprintf格式化字符串,将其拆分然后内爆!
<?php
$no_arr = ['1234', '123', '12345', '123456789012345'];
foreach($no_arr as $n){
$formatted_number = str_split(sprintf("%012d", $n), 4);
echo substr(implode("-", $formatted_number), 0, 14) .'<br>';
}
输出将是:
0000-0000-1234
0000-0000-0123
0000-0001-2345
1234-5678-9012
说明:
$twelve_digit = sprintf("%012d", $n);
$split_into_4 = str_split($twelve_digit, 4);
$add_hyphen = implode("-", $split_into_4);
$remove_trailing_chars = substr($add_hyphen, 0, 14);
echo $remove_trailing_chars ." <br/>";
一个班轮:
echo substr(implode("-", str_split(sprintf("%012d", $n), 4)), 0, 14);
答案 2 :(得分:1)
您可以使用vsprintf,这是一种更简单的方法
<?php
$no_arr = ['1234', '123', '12345', '123456789012345'];
foreach($no_arr as $n){
echo vsprintf("%04d-%04d-%04d",str_split(sprintf("%012d", $n), 4))."<br/>";
}
输出将是:
0000-0000-1234
0000-0000-0123
0000-0001-2345
1234-5678-9012