这个面试题要求从尾部开始安装指定位数分割字符串,如“1234567”,按3位长度分割,转换为“1,234,567”。对php函数比较熟悉的,知道可以用 number_format('1234567') 来生产结果。但是我们要知道 number_format只能对数值型字符串进行处理,并且只能按照3位长度分割。如何使用通用的解决方案了。下面是用两种方法来实现上面的方法
function str_format1($str,$sep_number=3,$sep=','){ if($sep_number < 1) $sep_number=3; $len=strlen($str); $remain=$len % $sep_number; if($remain==0) $remain=$sep_number; $count=ceil($len / $sep_number); $res=''; for($i=0;$i < $count;$i++){ if($i==0){ $start=0; }else{ $start=$remain + ($i-1)*$sep_number; } $length = $i==0 ? $remain : $sep_number; $res.=($res ? $sep : '').substr($str,$start,$length); } return $res; } function str_format2($str,$sep_number=3,$sep=','){ if($sep_number < 1) $sep_number=3; $len=strlen($str); $count=ceil($len / $sep_number); $str=strrev($str); $res=''; for($i=0;$i < $count;$i++){ $start= $i*$sep_number; $res=strrev(substr($str,$start,$sep_number)).($res ? $sep.$res : ''); } return $res; } $str=''; var_dump(str_format2('1234567'));//"1,234,567" var_dump(str_format2('abc2defg',4));//"abc,defg"
str_format2函数里面用到 strrev函数,帮字符串颠倒过来。这里没有考虑有汉字的情况,如果有需要,帮其中strlen换成mb_strlen、substr换成mb_substr,然后用第一个函数即可
发表评论 取消回复