如何在PHP中格式化字符串中的一些数字?
我有字符串:如何在PHP中格式化字符串中的一些数字?,php,Php,我有字符串: HAMMER FORGED (5.400PCE-2,340Kg-6.000M3-DANGER TYPE 2) 并希望将该字符串格式化为 HAMMER FORGED (5,40PCE-2.340,00Kg-6M3-DANGER TYPE 2) 我知道的每个数字都可以使用number\u format(),但是如何提取这些数字并将其放回正确的位置呢 模式是固定的:商品名称(alpha num)后面是属性([qty][unit]-[weight]Kg-[volume]M3类型),字符
HAMMER FORGED (5.400PCE-2,340Kg-6.000M3-DANGER TYPE 2)
并希望将该字符串格式化为
HAMMER FORGED (5,40PCE-2.340,00Kg-6M3-DANGER TYPE 2)
我知道的每个数字都可以使用number\u format()
,但是如何提取这些数字并将其放回正确的位置呢
模式是固定的:
商品名称(alpha num)
后面是属性([qty][unit]-[weight]Kg-[volume]M3类型)
,字符长度动态这里是一个带有preg\u replace\u callback()的解决方案。这有点复杂,因为您还需要捕获浮点值之间的子字符串
数字匹配是:
去掉逗号(必要时)
转换为float
值
通过number\u float()
重新格式化(根据需要)
代码:()
输出:
HAMMER FORGED (5,40PCE-2.340,00Kg-6M3-DANGER TYPE 2)
以下是与preg\u replace\u callback()
生成的$m
数组相关的匹配项:
Full match 14-37 `(5.400PCE-2,340Kg-6.000`
Group 1. 15-20 `5.400`
Group 2. 20-24 `PCE-`
Group 3. 24-29 `2,340`
Group 4. 29-32 `Kg-`
Group 5. 32-37 `6.000`
(5.400PCE-2340kg-6.000M3-危险类型2)
和(5,40PCE-2.340,00Kg-6M3-危险类型2)
完全不同,我指的是一些额外添加的零。。。这是打字错误吗?请再显示几个示例输入字符串和您的预期结果,以便我们了解您的输入数据可能会发生什么变化。此字符串可能会发生变化,或者它将始终具有相同的大小/图案?图案是固定的,商品名称(alpha num)后跟属性([数量][单位]-[重量]千克-[体积]立方米类型),动态字符长度,在生成字符串之前,您能否更改数据?例如,如果您知道qty=5.400
但需要qty=5,40
,只需将
替换为,
并删除0
,否?因为如果模式的每个值可以有不同的值(例如qty=5.400
或qty=12.400
),则无法生成“静态”脚本来替换原始字符串中的值,这会有所帮助。。非常感谢。但指数从何而来?我在数组中看到了五个组(…),它们的索引应该是0-4?@Anggariwijaya我对我的答案做了更多的解释$m[0]
是完整字符串匹配,但我在替换回调中不使用该元素。
Full match 14-37 `(5.400PCE-2,340Kg-6.000`
Group 1. 15-20 `5.400`
Group 2. 20-24 `PCE-`
Group 3. 24-29 `2,340`
Group 4. 29-32 `Kg-`
Group 5. 32-37 `6.000`