我有这样的字符串:
$string = "2 blocks and 4 allerts";
我想将数字2和4转换为字母,输出如下:
$output = "two blocks and four allerts;
我曾尝试使用str_replace()函数,但只有在字符串有一个数字时才有效。
function ( $string = "2 blocks and 4 allerts" ) {
return str_replace( 2, 'two', $string );
}
答案 0 :(得分:1)
您的问题没有显示任何努力,但以下内容可能对您有用:
这很大程度上取决于你的数字会有多长?假设0到9,你会这样做:
$numbers = array(0,1,2,3,4,5,6,7,8,9);
$number_words = array('zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine');
$string = "I have 3 apples.";
$new_string = str_replace($numbers, $number_words, $string);
上述解决方案适用于简单的单词和替换。
例如,对于诸如1995445之类的数字,您应该搜索互联网(或写一个)的函数,这些函数会将数字转换为字符串。
这是一个很好的功能: http://www.karlrixon.co.uk/writing/convert-numbers-to-words-with-php/
我们做的是首先从字符串中提取数字:
$rule = "/([0-9]+)/";
$string = "I have 2 mobile phones, each containing 2500 messages";
$num_match;
然后我们遍历字符串。每次我们只替换第一个出现的数字,捕获它,将其传递给我们的number_to_string()
函数,然后获取字符串,在我们的替换函数preg_replace()中使用返回的字符串。我们使用preg_replace()
的{{1}}参数来限制替换仅限于每次迭代的第一次出现:
$limit
我在浏览器中得到的是:
while( preg_match($rule, $string, $num_match) )
{
$string = preg_replace("/".$num_match[0]."/", number_to_string($num_match[0]), $string, 1);
}
echo $string;