PHP str_replace用单词替换数字

时间:2013-01-04 05:25:22

标签: php str-replace

我有一个网站需要向用户显示电话号码,而不是显示某人从源代码中收集的实际号码,我想用相应的单词替换电话号码的每个数字。例如......

355-758-0384

Would become

three five five - seven five eight - zero three eight four

可以这样做吗?对不起,我没有任何代码要显示,因为我甚至不知道从哪里开始。

3 个答案:

答案 0 :(得分:8)

$string="355-758-0384";
$search  = array(0,1,2,3,4,5,6,7,8,9);
$replace = array('zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine');
echo str_replace($search, $replace, $string);

然后您可以使用任何不同的字符串,而无需更新代码

编辑:

如果你想要自动空格,那么你的$ replace数组可以是

$replace = array('zero ', 'one ', 'two ', 'three ', 'four ', 'five ', 'six ', 'seven ', 'eight ', 'nine ');

答案 1 :(得分:1)

str_replace('  ', ' ', strtr($phone_number, array(
  '0' => ' zero ',
  '1' => ' one ',
  ...
)))

答案 2 :(得分:0)

$string = '355-758-0384';
$numbers = array(
  '0' => 'zero',
  '1' => 'one',
  '2' => 'two',
  '3' => 'three',
  '4' => 'four',
  '5' => 'five',
  '6' => 'six',
  '7' => 'seven',
  '8' => 'eight',
  '9' => 'nine',
);
$string = preg_replace_callback( '/[0-9]/', function ( $matches ) use ( $numbers ) {
  return $numbers[ $matches[0] ];
}, $string );

首先尝试其他解决方案之后,我使用这个解决方案,因为它的性能更高。我认为非正则表达式解决方案会更快,但在这种情况下不会。

我在PHP 7.0.28上使用10k交互测试:

preg_replace_callback  0.00643s
str_replace w/strtr    0.01015s  57% slower
str_replace w/arrays   0.01123s  74% slower

对于短划线周围的空间:

$string = str_replace( '-', ' - ', $string );