1

私はこれをこの文字列に持っていこうとしています

**string** = 55 Banana Slush 25 Testの中へFifty five Banana Slush twenty five test


今、私は任意の数を単語に変換する機能を持っていますreplaceNumtoWord($number)

ただし、文字列を取得し、各数値を見つけて、文字列から数値を抽出するのではなく、文字列内の各数値に対して関数を使用する必要があります

何かアイデアや提案はありますか?

4

3 に答える 3

4

あなたが使用することができますpreg_replace_callback()

$str = preg_replace_callback('/\d+/', function($match) {
    return replaceNumToWord($match[0]);
}, $str);

匿名関数をサポートしていない古いバージョンのPHPを使用する必要がある場合:

function _num2word_cb($match) {
    return replaceNumToWord($match[0]);        
}
$str = preg_replace_callback('/\d+/', '_num2word_cb', $str);

補足:パターン\d+は、表示される場所に関係なく、任意の数字のシーケンスに一致します。たとえば、「my10、20、30foo」の10、20、および30に一致します。\b\d+\b20のみに一致させたい場合は、パターンをに変更できます。

于 2012-05-23T05:36:46.883 に答える
1

preg_replace_callbackを使用できます。

function transNumber($str) {
  return preg_replace_callback('/\d+/', function($matches){
            return replaceNumtoWord($matches[0]);
         }, $str);
}

phpバージョンが5.3未満の場合は、preg_replace_callbackに渡される関数を定義する必要があります。

于 2012-05-23T05:40:08.873 に答える
1
preg_replace_callback ( mixed $pattern , callable $callback , mixed
 $subject [, int $limit = -1 [, int &$count ]] )

この関数の動作は preg_replace() とほぼ同じですが、置換パラメータの代わりにコールバックを指定する必要がある点が異なります。

于 2012-05-23T05:44:55.597 に答える