Переключите регистр символов, php

Как может я подкачивать вокруг / переключается случай символов в строке, например:

$str = "Hello, My Name is Tom";

После того, как я выполню код, я получаю результат как это:

$newstr = "hELLO, mY nAME Is tOM";

Это даже возможно?

10
задан Gordon 24 September 2012 в 15:18
поделиться

3 ответа

Вам нужно будет перебрать строку, проверяя регистр каждого символа, вызывая strtolower () или ] strtoupper () соответствующим образом, добавляя измененный символ в новую строку.

1
ответ дан 3 December 2019 в 13:12
поделиться

Я полагаю, что решением может быть что-то вроде этого:

$str = "Hello, My Name is Tom";
$newStr = '';
$length = strlen($str);
for ($i=0 ; $i<$length ; $i++) {
    if ($str[$i] >= 'A' && $str[$i] <= 'Z') {
        $newStr .= strtolower($str[$i]);
    } else if ($str[$i] >= 'a' && $str[$i] <= 'z') {
        $newStr .= strtoupper($str[$i]);
    } else {
        $newStr .= $str[$i];
    }
}
echo $newStr;

Что дает вам:

hELLO, mY nAME IS tOM


т.е. you:

  • перебирает каждый символ исходной строки
  • , если он находится между A и Z, вы переводите его в нижний регистр
  • , если он между a и z, вы переводите его в верхний регистр
  • иначе, вы оставляете его как есть

Проблема в том, что это, вероятно, не будет хорошо работать со специальными символами, такими как акценты: - (


И вот быстрое предложение, которое может (или не может) работать для некоторые другие символы:

$str = "Hello, My Name is Tom";
$newStr = '';
$length = strlen($str);
for ($i=0 ; $i<$length ; $i++) {
    if (strtoupper($str[$i]) == $str[$i]) {
        // Putting to upper case doesn't change the character
        // => it's already in upper case => must be put to lower case
        $newStr .= strtolower($str[$i]);
    } else {
        // Putting to upper changes the character
        // => it's in lower case => must be transformed to upper case
        $newStr .= strtoupper($str[$i]);
    }
}
echo $newStr;

Теперь можно использовать mb_strtolower и mb_strtoupper : это может помочь со специальными символами и многобайтовыми кодировками ...

0
ответ дан 3 December 2019 в 13:12
поделиться

Хорошо, я знаю, что у вас уже есть ответ, но несколько непонятная функция strtr () требует для этого использования;)

$str = "Hello, My Name is Tom";
echo strtr($str, 
           'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',
           'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
9
ответ дан 3 December 2019 в 13:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: