我一直在使用stackoverflow来学习很多关于PHP和JS(包括jquery)的知识,所以我倾向于谷歌,但我没有找到对这个问题的确切答复
我有许多字符串,其中的单词与数字混合在一起,例如:
“来自12个人的60个评论,20%的用户”
这是一个例子,但它可能要复杂得多(“word_one 45 word_two word_three 657 word_four 32%word_five USD20”)
用途是内容本地化:
我想检索数字并将它们保存到数组中 - >完成
我希望将这些数字与我在数据库中已有的数字相匹配,即如果我有
zh:“来自2个人的2条评论,2%的用户”
es:“2 comentarios de 2 personas,el 2%de los usuarios” - >完成了
现在我要做的是替换从数据库中提取的匹配字符串中的数字(所有这些都是“2”,因为我用这种方式保存它们,以避免复数奇异问题)英文原文字符串。 例如:
我的英文版本:
“来自12个人的60个评论,20%的用户”
我在数据库中有这个:
zh:“来自2个人的2条评论,2%的用户”
es:“2 comentarios de 2 personas,el 2%de los usuarios”
我希望用西班牙语:
“60 comentarios de 12 personas,el 20%de los usuarios”
代码:
$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]);
提前多多感谢!!
答案 0 :(得分:0)
为什么不在数据库中保存模板语句,以便与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);
$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);