在PHP中反转字符串中的数字

时间:2013-11-05 11:12:24

标签: php numbers reverse

我有一个包含字母和数字的UTF8字符串。例如:

"Hello World 37. What? 24 last 6650"

我想只反转数字,但将数字保存在同一个地方。 输出应为:

"Hello World 73. What? 42 last 0566"

4 个答案:

答案 0 :(得分:3)

echo preg_replace_callback('/\d+/', function (array $m) { return strrev($m[0]); }, $string);

答案 1 :(得分:0)

在我发布问题之前,我考虑过这个问题并得到了一个适合我的想法,所以我只是发布这个问题来丰富数据库。

function reverseNumbersInString($str){
    $tokens = explode(" ", $str);
    $res = "";
    for ($i = 0; $i < sizeof($tokens); $i++){
        if (intval($tokens[$i] > 0 )){
            $tokens[$i] = strrev($tokens[$i]);
        }
        $res .= " " . $tokens[$i];
    }
    return $res;
}

答案 2 :(得分:0)

这应该这样做:

$stringWithReversedNumbers = preg_replace_callback(
    '/\d+/',
    function ($matches) {
        return strrev($matches[0]);
    },
    $originalString
);

或者,如果您只想操作不同单词的数字(即不是另一个单词的一部分,如果您希望hello123goodbye保持不变,因为123本身不是单词),将\d+更改为\b\d+\b

答案 3 :(得分:0)

也许是这样的:

$string = "Hello World 37. What? 24 last 6650";

preg_match_all('/\d+/', $string, $matches, PREG_OFFSET_CAPTURE);

foreach ($matches[0] as $numberData) {
    $numberArray = str_split($numberData[0]);
    $reversedNumber = implode('', array_reverse($numberArray));
    $string = substr_replace($string, $reversedNumber, $numberData[1], strlen($numberData[0]));
}