我一直在使用stackoverflow来学习PHP和JS (包括jquery),所以我总是在谷歌上搜索,但是我没有找到这个问题的确切答案。
我有很多字串和数字混在一起,比如:
“来自12人的60篇评论,占用户的20%”
这是一个例子,但可能要复杂得多("word_one 45 word_two word_three 657 word_four 32% word_five USD20")
使用内容本地化:
我想检索这些数字并将它们保存到一个数组-> to 中。
我想将这些数字与数据库中已有的数字相匹配,也就是说,如果我有
en:“来自2个人的2个评论,2%的用户”
es:"2 comentarios de 2 personas,el 2% de los usuarios“-> de.
现在,我想要做的是将从数据库中提取出来的匹配字符串中的数字(它们都是"2“,因为我以这种方式保存它们,以避免复数-单数问题)替换为英文原始字符串中的数字。示例:
我用英语写了这个:
“来自12人的60篇评论,占用户的20%”
我在数据库中有这样的内容:
en:“来自2个人的2个评论,2%的用户”
es:"2 comentarios de 2 personas,el 2% de los usuarios“
我想用西班牙语写这个:
"60名副主席,20%的洛苏里奥斯“
代码:
$pattern = '!\d+!';
$repv = preg_replace($pattern, "2", $v);
preg_match_all($pattern, $v, $matches);
$matchesnb = count($matches, 1);
$pattarray = array_fill("0", "1", array_fill("0", ($matchesnb-1), $pattern));
$reptarget = preg_replace($pattarray, $matches, $dbdata[1]);提前谢谢!
发布于 2012-12-05 03:17:18
为什么不将模板语句保存在数据库中,以便与sprintf()函数一起使用?
$str = array(
'en' => '%d reviews from %d people, %01.1f%% of users',
'es' => '%d comentarios de %d personas, el %01.1f%% de los usuarios'
);
$res = sprintf($str['es'],60,12,20);
编辑:句子中单词的顺序在所有语言中并不相同。因此,我认为对论点进行编号是一种更好的办法。我在下面的数组中添加了土耳其选项,以显示arg1和arg2的切换以及百分比符号如何改变位置(例如,它放在前面,而不是在土耳其数字之后)。
$str = array(
'en' => '%1$d reviews from %2$d people, %3$01.1f%% of users',
'es' => '%1$d comentarios de %2$d personas, el %3$01.1f%% de los usuarios',
'tr' => '%2$d kullanıcıdan %1$d yorum, tüm kullanıcıların %%%3$01.1f\'si'
);
$res = sprintf($str['es'],60,12,20);https://stackoverflow.com/questions/13715099
复制相似问题