重新格式化字符串PHP数组中的数字

时间:2018-07-23 10:29:59

标签: php arrays regex number-formatting

我有一个包含这样的字符串的数组:

$items = array(
  "Receive 10010 from John",
  "Send 1503000 to Jane",
  "Receive 589 from Andy",
  "Send 3454 to Mary"
);

我想重新格式化此数组中的数字,这样它将变成这样:

$items = array(
  "Receive 10.010 from John",
  "Send 1.503.000 to Jane",
  "Receive 589 from Andy",
  "Send 3.454 to Mary"
);

如果我使用number_format函数,它的数字将像这样:

$number = '412223';
number_format($number,0,',','.');
echo $number; //412.223

3 个答案:

答案 0 :(得分:6)

您可以使用preg_replace_callback来匹配字符串中的数字并应用一些自定义格式。对于单个字符串,它看起来像这样:

$string = "Receive 10010 from John";

$formatted = preg_replace_callback( "/[0-9]+/", function ($matches) {
    return number_format($matches[0], 0, ',', '.');
}, $string);

echo $formatted;
  

从约翰那里收到10.010


如果您想对整个数组应用相同的逻辑,则可以将以上内容包装在对array_map的调用中:

$formatted = array_map(function ($string) {
    return preg_replace_callback( "/[0-9]+/", function ($matches) {
        return number_format($matches[0], 0, ',', '.');
    }, $string);
}, $items);

print_r($formatted);
  

数组
      (
        [0] =>从约翰那里收到10.010
        [1] =>发送1.503.000到Jane
        [2] =>从安迪收到589
        [3] =>发送3.454给玛丽
      )

答案 1 :(得分:1)

你去了

请遵循以下步骤

  1. 使用foreach遍历循环
  2. 使用preg_match_all('!\ d +!',$ str,$ matches)提取数字;
  3. 应用数字格式number_format($ matches [0],0,',','。');
  4. 更新数组项

所以整个故事是使用preg_match_all('!\ d +!',$ str,$ matches);并提取字符串号。

答案 2 :(得分:1)

如果您不希望十进制数字,也可以使用类似的

Object.prototype
  • $items = preg_replace('/\d\K(?=(?:\d{3})+\b)/', ".", $items); 是数字\d的{​​{3}}
  • shorthand报告的比赛开始
  • 在每个数字之后,\K resets [0-9]检查是否存在前三个数字lookahead,直到下一个multiples(数字的末尾)为止。

请参见word boundaryregex demo at regex101