使用php通过标记格式化数字
我正在寻找一种使用“令牌”格式化数字的方法。这需要是有条件的(对于前几个前导字符) 例如:使用php通过标记格式化数字,php,phone-number,Php,Phone Number,我正在寻找一种使用“令牌”格式化数字的方法。这需要是有条件的(对于前几个前导字符) 例如: <?php $styles=array('04## ### ###','0# #### ####','13# ###','1800 ### ###'); format_number(0412345678); /*should return '0412 345 678'*/ format_number(0812345678); /*should return '08 1234 5678'*/
<?php
$styles=array('04## ### ###','0# #### ####','13# ###','1800 ### ###');
format_number(0412345678); /*should return '0412 345 678'*/
format_number(0812345678); /*should return '08 1234 5678'*/
format_number(133622); /*should return '133 622'*/
format_number(1800123456); /*should return '1800 123 456'*/
?>
如果你没猜到,我用它来格式化澳大利亚电话号码,取决于他们的“类型”
我有一个PHP函数可以做到这一点,但它只有约114行,并且包含大量重复代码
有人能帮忙吗?只是一个玩具的例子
$number="0412345678";
$styles=array('04## ### ###','0# #### ####','13# ###','1800 ### ###');
$whatiwant = preg_grep("/04/i",$styles); #04 is hardcoded.
$s = explode(" ",$whatiwant[0]);
$count= array_map(strlen,$s);
$i=0;
foreach($count as $k){
print substr($number,$i,$k)." ";
$i=$k;
}
输出
$ php test.php
0412 345 234
$样式应按优先级排序。也许数字的初始掩码的长度应该决定优先级,在这种情况下,您可以使用
usort($styles, function($a, $b) {
return strspn($b, '0123456789') - strspn($a, '0123456789');
});
小心谨慎——不要把电话号码当作数字。他们不是。因此,您的示例代码应为
格式_编号('0412345678')我认为它不能正常工作。。从:0412345678、0891234567、133622、1800321456和130032456输出:0412 345 234、0891 234 1231336 22 622、1800 321 032、1300 321032@Adam,我相信这一切都是为了说明如何正确地获取与$number
格式匹配的样式。我试图做的是尽可能少地对格式进行硬编码,因为“样式”将来自数据库(用于用户自定义)。我还不知道stru split
。谢谢当我发布我的答案时,我错过了你的答案,现在我已经删除了。事实上,我还有一个相关的问题。如果传递的电话号码长于“样式”号码,但符合所需格式(即:1800123456233);要将结尾的“233”(或任何其他数字)打印为“分机”,即“1800 123 456#233”,需要什么?
usort($styles, function($a, $b) {
return strspn($b, '0123456789') - strspn($a, '0123456789');
});