php字符串格式化

2021-03-11

输出字符串格式化

// 根据格式化字符串$format生成一个新字符串,$values与格式化字符串中的格式化字符一一对应
sprintf($format, ...$values);
var_dump(sprintf('this is %s,age is %d', 'lilei', 18));

格式化字符串写入文件

// 将根据$format格式化的字符串写入文件资源$handle,字符串参数的数量与$format中的格式化数量一一对应
$fp = fopen('C:\Users\Administrator\Desktop\1.txt', 'w+');
fprintf($handle = $fp, $format = '%020d-%10d-%f-%x', '1', '2', '3', '123');

format格式化字符串

// 格式字符串由零个或多个指令组成,原型 %[argnum$][flags][width][.precision]specifier
$argnum = 0; // 一个整数,后跟一个符号$,以指定要在转换中处理的$number参数。
$flags = [
    '-',    // 左对齐;默认右对齐
    '+',	// 正数前加一个+号
    ' ',    // 用空格填充结果
    '0',	// 用零填充数字
    "'",	// 用字符'填充结果
];
$width = 0; //  一个整数,表示此转换应产生的字符数(最小值)
$precision; // 句点.后跟一个整数,其含义取决于说明符
            // e,E,f和F说明符:小数点后的位数(默认6)
            // g,G,h和H说明符:最大数目
            // s说明符:字符串最大字符限制
$specifier = [
    '%',	// 文字百分比字符。不需要任何参数。
    'd',	// 参数被视为整数,并以(有符号)十进制数表示。
    'u',	// 参数被视为整数,并以(无符号)十进制数形式出现。
    'b',	// 参数被视为整数,并以二进制数表示。
    'o',	// 参数被视为整数,并以八进制数表示。
    'x',	// 参数被视为整数,并以十六进制数字(带有小写字母)的形式表示。
    'X',	// 参数被视为整数,并以十六进制数字(带有大写字母)的形式呈现
    'c',	// 参数被视为整数,并以该ASCII形式显示为字符。
    'e',	// 参数被视为科学记数法(例如1.2e+2)。
    'E',	// 参数被视为科学记数法,但使用大写字母(例如1.2E+2)。
    'f',	// 参数被视为浮点数,并显示为浮点数(可识别语言环境)。
    'F',	// 参数被视为浮点数,并显示为浮点数(不支持区域设置)
    's',	// 参数被视为字符串显示。
    'g',    // 通用格式。如果非零,则使P等于精度;如果省略精度,则使P等于6;如果精度为零,则使P等于1。如果样式E的转换的指数为X:如果P>X≥-4,则转换采用样式f和精度P−(X + 1)。否则,将使用样式e和精度P−1进行转换。
    'G',	// 类似于说明g符,但使用E和f。
    'h',	// 类似于说明g符,但使用F。自PHP 8.0.0起可用。
    'H',	// 类似于说明g符,但使用E和F。自PHP 8.0.0起可用。
];

数字格式化

// 将小数$number保留$decimals位小数以千位分隔符格式化;$dec_point为小数点字符,$thousands_sep为千位分隔符
number_format($number, $decimals = 0, $dec_point = '.', $thousands_sep = ',');

金额格式化

// 设置金额格式化的地区
setlocale(LC_MONETARY, 'en_US');
// 将金额$number以$format格式化为货币字符串,windows不支持
money_format($format, $number);

// $format由以下部分组成
// 单个%字符
// 可选的标记(flags),标记可多选
$flags = [
    '=f', // 使用f将金额填充到指定长度,默认为空格填充
    '^',  // 禁用分组字符(比如金额中的逗号)
    '+/(', // 正负数的格式;+表示:负数以+/-显示,正数不显示+,默认为+;(表示:负数以()包括,不显示负号
    '!',   // 不输出货币符号
    '-',  // 左对齐(默认右对齐),填充将填充在右侧(默认左侧)
];
// 可选的字段宽度
$w = 0; // 十进制数值字符串的宽度。默认值0
// 可选的,左侧精度
$lprecision = '#n'; // 小数字符前的最大位数;位数小于n时将使用填充字符填满,大于n时没有处理;分组字符不计入填充数量
// 可选的,右侧精度
$rprecision = '.p'; // 小数字符后的最大位数(p),会进行四舍五入
// 必选的,单个转化字符
$conversions = [
    'i', // 根据国际化区域设置中的货币格式,格式化数值(比如,locale是USA:USD 1,234.56)
    'n', // 根据国际化区域设置中国家的货币格式,格式化数值(比如,locale是de_DE:EU1.234,56)
    '%', // 返回字符串%
];

 

{/if}