1

PHP と JS (jquery を含む) の両方について多くのことを学ぶために stackoverflow を使用してきたため、常に Google で検索する傾向がありますが、この質問に対する正確な回答は見つかりませんでした。

次のように、単語と数字が混在する多くの文字列があります。

「12 人からの 60 件のレビュー、ユーザーの 20%」

これは一例ですが、もっと複雑な場合もあります ("word_one 45 word_two word_three 657 word_four 32% word_five USD20")

用途はコンテンツのローカリゼーションです:

数値を取得して配列に保存したい- >完了

これらの数値を、データベースに既にあるものと照合したい。

ja: "2 人から 2 件のレビュー、ユーザーの 2%"

es: "2 つのペルソナの 2 つのコメント、el 2% de los usuarios" -> やりすぎ

今私がしたいことは、データベースから抽出された一致する文字列の数字を置き換えることです(複数単数の問題を避けるために、この方法で保存したため、すべて「2」です)英語。例:

私はこれを英語で持っています:

「12 人からの 60 件のレビュー、ユーザーの 20%」

私はデータベースにこれを持っています:

ja: "2 人から 2 件のレビュー、ユーザーの 2%"

es: "2 ペルソナの 2 コメント, el 2% de los usuarios"

スペイン語でこれが欲しい:

「12 のペルソナに関する 60 のコメント、20% の損失」

コード:

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

よろしくお願いします!

4

1 に答える 1

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);
于 2012-12-05T03:17:18.580 に答える