нашел функцию которая в строке меняет большие буквы на маленькие и наоборот только не могу понять почему символ ASCII находится между 97 и 122 его надо пропустить через srtoupper - вроде логически надо менять на маленькую то есть пропустить через strtolower Код (Text): function change($str) { $arr = str_split($str, 1); $str2 = ''; foreach ($arr as $item) { if (ord($item) >= 97 && ord($item) <= 122) { $str2 .= strtoupper($item); }else { $str2 .= strtolower($item); } } return $str2; } echo change('bbb,GGG');
@selivanov, всё там правильно. PHP: echo chr(97),chr(98), chr(99); // abc, а не ABC Другое дело, что с той же кириллицей эта функция работать не будет.
с кинь ссылку на нормальную таблицу ASCII --- Добавлено --- оказывается таблицу ASCII КОТОРУЮ я нашел не правилььная там символы от 97-до 122 заглавные .отсюда и конфуз
Таблица символов ASCII --- Добавлено --- Вообще, можно сделать как-то так: PHP: <?php function changeCase($str = '') { return preg_replace_callback('/\p{L}/u', function($a){ return ($upper = mb_strtoupper($a[0], 'UTF-8')) == $a[0] ? mb_strtolower($a[0], 'UTF-8') : $upper; }, $str); }
А если попробовать - ctype_lower ( string $text ) ctype_upper ( string $text ) Они по идеи должны давать результат вне зависимости от кодировки и языка. https://php.ru/manual/function.ctype-lower.html
@glorsh66, обратили внимание на фразу: "Возвращает TRUE, если каждый символ в строке text является строчной буквой в текущей локали"?
Вариант для английского Или нужно вручную установить setlocale(LC_CTYPE, 'ru.UTF-8') Код (Text): private function reverse_lower_to_upper(string $str): string { $len = strlen($str); $result_str=""; for ($i=0;$i<$len;$i++) { if (ctype_lower($str[$i])) $result_str.= strtoupper($str[$i]); else $result_str.= strtolower($str[$i]); } return $result_str; }
Универсальная с использованием mb_ функций Но она работает значительно медленнее. Код (Text): private function reverse_lower_to_upper_mb(string $str): string { $len = mb_strlen($str); $result_str=""; for ($i=0;$i<$len;$i++) { $low= mb_strtolower(mb_substr($str,0+$i,1)); $upp= mb_strtoupper(mb_substr($str,0+$i,1)); $cur = mb_substr($str,0+$i,1); if ($low===$cur) $result_str.=$upp; else $result_str.=$low; } return $result_str; } если возникнут проблемы с кодировкой можно в ручную указать кодировк утекста в Код (Text): mb_substr($str,0+$i,1,'UTF-8')