Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中格式化字符串中的一些数字?_Php - Fatal编程技术网

如何在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`