2012-05-23 1 views
1

Я пытаюсь принять это к этой строкеИспользование функции на любые номера в пределах строки

**string** = 55 Banana Slush 25 Test в Fifty five Banana Slush twenty five test


Теперь у меня есть функция, чтобы преобразовать любые числа в слова, который replaceNumtoWord($number)

Однако мне нужно взять строку , найти каждое число, затем использовать функцию на каждом номере внутри строки, а затем извлечь из нее цифры.

Любые идеи или предложения?

ответ

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

Sidenote: шаблон \d+ будет соответствовать любой последовательности цифр, независимо где они появятся, например он будет соответствовать 10, 20 и 30 в «my10, 20, 30foo». Вы можете изменить шаблон на \b\d+\b, если хотите, чтобы он соответствовал 20.

+0

удаление шахты, сохранение ваших, поскольку это было раньше, и мое собственное решение не добавило ничего нового. – Gordon

+1

Приносим извинения за Гордон, я изменил имя функции и никогда не обновлял ее из вашего кода, кажется, нет ошибок, но есть проблема с моей функцией replaceNumToWord, поскольку она ничего не возвращает. Спасибо и TheifMaster и Gordon – Braunson

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.

1
preg_replace_callback (mixed $pattern , callable $callback , mixed 
$subject [, int $limit = -1 [, int &$count ]]) 

Поведение этой функции практически идентична preg_replace(), за исключением того, что вместо параметра замены, необходимо указать обратный вызов, за исключением.