Php 从字符串中提取数字,将其保存到数组中,然后将其放回字符串中
我一直在使用stackoverflow学习很多关于PHP和JS(包括jquery)的知识,所以我一直倾向于使用google,但我没有找到这个问题的确切答案 我有很多字符串,其中有数字和单词,比如: 来自12人的60条评论,20%的用户 这是一个例子,但它可以是更复杂的单词,一个45单词,两个单词,三个657单词,四个32%单词,五个20美元 其用途是内容本地化: 我想检索数字并将其保存到数组->完成 我想将这些数字与数据库中已有的数据进行匹配,即 en:2人2条评论,2%的用户 es:2个人物角色,2%的人物角色->完成 现在我要做的是替换从数据库中提取的匹配字符串中的数字,所有这些数字都是2,因为我这样保存它们,以避免英文原始字符串中的数字出现复数单数问题。 例如: 我用英语写了这个: 来自12人的60条评论,20%的用户 我的数据库中有: en:2人2条评论,2%的用户 es:2个人物角色中的2个人物角色,通常为2% 我要西班牙文的: 60人12人,20%的普通人 代码:Php 从字符串中提取数字,将其保存到数组中,然后将其放回字符串中,php,arrays,preg-replace,preg-match,preg-match-all,Php,Arrays,Preg Replace,Preg Match,Preg Match All,我一直在使用stackoverflow学习很多关于PHP和JS(包括jquery)的知识,所以我一直倾向于使用google,但我没有找到这个问题的确切答案 我有很多字符串,其中有数字和单词,比如: 来自12人的60条评论,20%的用户 这是一个例子,但它可以是更复杂的单词,一个45单词,两个单词,三个657单词,四个32%单词,五个20美元 其用途是内容本地化: 我想检索数字并将其保存到数组->完成 我想将这些数字与数据库中已有的数据进行匹配,即 en:2人2条评论,2%的用户 es:2个人物角
提前多谢 为什么不将模板语句保存在数据库中,以便与函数一起使用
$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);
你描述了你在做什么,你展示了你的代码片段,以及在别处定义的变量。现在,你介意问个问题吗?嗨,问题是我想用西班牙语回答这个问题;不太清楚。。我刚刚添加了一个缺少的$pattern变量。你正在做一个简单的文本到文本的映射转换,这意味着两个文本中的数字都是没有意义的,它们只需要按固定顺序替换。您可以使用的任何机会,例如%reviews%来自%people%people%的用户的评论,%perc%的用户作为模板,这样您就可以获得有意义的数字,当你想编辑你的句子时会容易得多?不幸的是,没有,因为文本比这个例子复杂得多:这是一个例子,但它可以是更复杂的单词,一个45字,两个字,三个657字,四个32%字,五个20美元,因为值似乎是在一个数字数组中,我建议$re=vsprintf$str['es'],$dbdata是一个小小的改进。@Mytskine是有意义的。我太习惯使用sprintf了,以至于完全忘记了vsprintf函数。谢谢你的改进。不幸的是,没有,因为文本比这个例子复杂得多:这是一个例子,但它可以是更复杂的单词,一个45单词,两个单词,三个657单词,四个32%单词,五个USD20@Julien这一点都不重要,您可以在单个字符串中替换100个值。你所需要做的就是在你的琴弦中适当地避开必要的位置。问题是我不知道琴弦是什么样子,也不知道。。。这只是一个例子
$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);