Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从字符串中提取数字,将其保存到数组中,然后将其放回字符串中_Php_Arrays_Preg Replace_Preg Match_Preg Match All - Fatal编程技术网

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

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个人物角

我一直在使用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%的普通人

代码:


提前多谢

为什么不将模板语句保存在数据库中,以便与函数一起使用

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