2012-12-05 40 views
1

我一直在使用stackoverflow来了解很多关于PHP和JS(包括jquery)的知识,所以我倾向于谷歌所有的时间,但我没有找到这个问题的确切答复从字符串中提取数字,将它们保存到数组中,并将它们放回到字符串中

我有与数字混合,喜欢的话许多字符串:

“12人60条评论中,20%的用户”

这是一个但它可以更复杂(“word_one 45 word_two word_three 657 word_four 32%word_five USD20”)

使用为内容的本地化:

我要检索的号码,并将其保存到一个数组- >完成

我想匹配这些数字与我已经在数据库中,也就是说,如果我已经

恩: “从2人2条评论中,用户的2%”

ES: “2名住客评语2名人物角色,EL 2%德洛斯USUARIOS” - >做得太

现在我想要做的是替换从数据库中提取的匹配字符串中的数字(它们都是“2”,因为我以这种方式保存它们以避免复数奇异问题)原始英文字符串。 例子:

我有这个英文:

“从12人,20%的用户有60条评论” 我有这个数据库:

于: “2人评价,2%的用户”

es:“2人评2人使用,2%使用者使用”

我想这在西班牙语:

“60个住客评语12个角色,EL 20%德洛斯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

您描述了您正在处理的内容,显示了代码片段(其他变量已定义)。现在,你介意问一个问题吗? – 2012-12-05 02:58:22

+0

嗨,问题是“我想用西班牙语”;)它不是很清楚..我只是添加了一个缺少的$模式变量。 – Julien

+0

你正在做一个简单的文本到文本的映射翻译,这意味着两个文本中的数字都没有意义,只需要按照固定的顺序进行替换即可。任何你可以使用的机会,比如%%%people,%perc%users的'%reviews%%评论'作为模板,所以你可以拥有“有意义的”数字,并且当你想要编辑句子时容易得多。 – Passerby

回答

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

作为值似乎是在一个数值数组,我建议'$ re = vsprintf($ str ['es'],$ dbdata)'稍作改进。 – 2012-12-05 03:29:59

+0

@Mytskine有道理。我很习惯使用sprintf,我完全忘记了vsprintf函数。感谢您的改进。 – inhan

+0

不幸的是没有,因为文字是比这个唯一的例子复杂得多:这是一个例子,但也可以是复杂得多(“word_one 45 word_two word_three 657 word_four 32%word_five USD20”) – Julien

相关问题