Nasıl oldu / örneğin, bir dize karakter harf geçiş takas edebilirsiniz:
$str = "Hello, My Name is Tom";
Ben kodu çalıştırdıktan sonra ben böyle bir sonuç almak:
$newstr = "hELLO, mY nAME Is tOM";
Bu bile mümkün mü?
Ben bir çözüm böyle bir şey kullanmak olabilir varsayalım:
$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;
Hangi seni alır:
hELLO, mY nAME IS tOM
i.e. you :
Bu varlık sorun muhtemelen :-( aksan gibi özel karakteri ile güzel iş olmaz
And here is a quick proposal that might (or might not) work for some other characters :
$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;
Bir fikir, şimdi, mb_strtolower
and mb_strtoupper
a> kullanmak olacaktır: özel karakterler ile yardım ve multi-byte kodlamaları olabilir ...
Bu soru eski olduğunu biliyorum - ama burada bir multi-byte uygulama benim 2 lezzetleri.
Multi function version: (mb_str_split function found here):
function mb_str_split( $string ) {
# Split at all position not after the start: ^
# and not before the end: $
return preg_split('/(?<!^)(?!$)/u', $string );
}
function mb_is_upper($char) {
return mb_strtolower($char, "UTF-8") != $char;
}
function mb_flip_case($string) {
$characters = mb_str_split($string);
foreach($characters as $key => $character) {
if(mb_is_upper($character))
$character = mb_strtolower($character, 'UTF-8');
else
$character = mb_strtoupper($character, 'UTF-8');
$characters[$key] = $character;
}
return implode('',$characters);
}
Tek fonksiyonlu versiyonu:
function mb_flip_case($string) {
$characters = preg_split('/(?<!^)(?!$)/u', $string );
foreach($characters as $key => $character) {
if(mb_strtolower($character, "UTF-8") != $character)
$character = mb_strtolower($character, 'UTF-8');
else
$character = mb_strtoupper($character, 'UTF-8');
$characters[$key] = $character;
}
return implode('',$characters);
}