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的整数倍时加入逗号,同样没有小数和负数的处理。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。