php数字格式化
看到一道面试题说不使用php函数将一个数字字符串(如123456789)格式化成每3个数字用逗号隔开的形式。
我的 第一反应是从尾部开始每3个插入一个逗号,可是查了查好象没有能这样插入字符串的函数,就只能自己截取拼接了。那么从尾部向前截取3个字符,再看前面部分是否大于3位,如果是就继续截取,直到前部分小于3位,最后把所有的后半部分加上逗号拼接起来,很自然地使用了递归。代码是这样:
function numFormat($num){ if( $len = strlen($num) > 3 ){ $front = substr($num,0,$len-4); //截取前面部分 $after = substr($num,-3); //截取后面部分 $newf = numFormat($front); //递归处理前面部分 $new = $newf.‘,‘.$after; //拼接上逗号 return $new; } return $num; }
代码中有一些问题,使用了2次的字符串的截取,不知道性能会不会很差,并且只考虑了正整数的情况,没有针对有负号和小数点的处理。
看了一下原文的答案,是这样的:
<?php $str = "12345678932132"; function nformat($str) { $n = ""; //临时的变量 $m = strlen($str); //获取字符串长度 $k = $m % 3; //让整个长度和3取余之后余数是多少 = 0 for($i=0; $i < $m; $i++) { if($i%3 == $k && $i!=0) { $n .=","; } $n .= $str{$i}; } return $n; } echo nformat($str); ?>
采取了完全不同的思路,基本是这样:循环地把每一个字符拼接到一个新的字符串,在遇到个数是3的整数倍时加入逗号,同样没有小数和负数的处理。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。