从字符串中提取数字,将它们保存到数组中,然后将它们放回字符串中

时间:2012-12-05 01:50:17

标签: php arrays preg-replace preg-match preg-match-all

我一直在使用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]);

提前多多感谢!!

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);


编辑:句子中单词的排序在所有语言中都不相同。出于这个原因,我认为对参数进行编号是一种更好的方法。我在下面的数组中添加了土耳其语选项,以显示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);