这个面试题要求从尾部开始安装指定位数分割字符串,如“1234567”,按3位长度分割,转换为“1,234,567”。对php函数比较熟悉的,知道可以用 number_format('1234567') 来生产结果。但是我们要知道 number_format只能对数值型字符串进行处理,并且只能按照3位长度分割。如何使用通用的解决方案了。下面是用两种方法来实现上面的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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,然后用第一个函数即可

相关评论(0)
您是不是忘了说点什么?

友情提示:垃圾评论一律封号...

还没有评论,快来抢沙发吧!