PHP中如何对整数或字符串进行逗号、短横线分隔格式化
解决方案
场景1:纯数字千分位分隔(对应示例1需求)
直接使用PHP内置的number_format()函数即可实现,支持快速生成逗号分隔的千分位格式,需要短横线的话做一次字符替换即可:
$input = 123456789; // 逗号分隔输出 echo number_format($input); // 123,456,789 // 短横线分隔输出 echo str_replace(',', '-', number_format($input)); // 123-456-789
注意:该方法会自动忽略前导零,不适用示例2的带前导零字符串场景
场景2:带前导零的自定义分段(对应示例2需求)
你示例2的分段规则是固定的「3位+4位+3位」,写一个自定义函数实现即可,支持自定义分隔符,也可以兼容示例1的9位数字场景:
/** * 自定义数字字符串分隔格式化 * @param string $input 输入的数字字符串 * @param string $delimiter 分隔符,默认逗号 * @return string 格式化后的字符串 */ function customNumberFormat(string $input, string $delimiter = ','): string { $len = strlen($input); // 适配10位字符串 3-4-3 分段 if ($len === 10) { return vsprintf("%s{$delimiter}%s{$delimiter}%s", [ substr($input, 0, 3), substr($input, 3, 4), substr($input, 7, 3) ]); } // 适配9位字符串 3-3-3 分段 if ($len === 9) { return vsprintf("%s{$delimiter}%s{$delimiter}%s", [ substr($input, 0, 3), substr($input, 3, 3), substr($input, 6, 3) ]); } // 其他长度可自行扩展规则,默认返回原内容 return $input; }
测试用例:
// 示例1测试 echo customNumberFormat('123456789'); // 123,456,789 echo customNumberFormat('123456789', '-'); // 123-456-789 // 示例2测试 echo customNumberFormat('0123456789'); // 012,3456,789 echo customNumberFormat('0123456789', '-'); // 012-3456-789
扩展说明
如果后续需要调整分段规则,只需要修改对应长度的截取和拼接逻辑即可,输入为整数类型时转成字符串传入即可保留前导零。
内容的提问来源于stack exchange,提问作者Germeloper
相关产品推荐
相关产品推荐

