如何使用PHP(例如
)切换每个字符的大小写I didN't gEt anY dEsseRt
到
i DIDn'T GeT ANy DeSSErT
是否有任何PHP代码可以执行此操作
答案 0 :(得分:4)
我的初期虽然是“pff,但这很容易”。然后我再想一想,实际上并不是那么简单......
就个人而言,我会这样做:
$upper = range("A","Z");
$lower = range("a","z");
$upper_lower = array_merge($upper,$lower);
$lower_upper = array_merge($lower,$upper);
$replacements = array_combine($upper_lower,$lower_upper);
$output = strtr($input,$replacements);
虽然Arthur Halma的答案令人印象深刻,但它是stolen from here并且未能解释它是如何工作的,所以我们走了!
首先,代码:
$output = strtolower($str) ^ strtoupper($str) ^ $str;
让我们从^
开始吧。这是一个非常罕见的运算符:Bitwise XOR。它采用左侧和右侧的位,并将XOR算法应用于它们。在字符串上使用时,它会逐个字符地执行此操作。
以下是XOR算法的样子:
A | B | A^B
---+---+-----
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0
在基础英语中,它表示“如果一个或另一个是真的,但不是两个”。这有点像你问“我应该往北走还是南走?”你无法双管齐下,所以这是一个XOR。
现在,让我们来看看你的字符串中的字符。正如我们很快就会看到的那样,创造角色的人非常聪明。如果你看一下字符图,你会发现字母A到Z的空格从65到90,a到z是97到122.让我们用二进制看一下:
A (65) 01000001 Z ( 90) 01011010
a (97) 01100001 z (122) 01111010
你会注意到,要在大写和小写之间切换,你所要做的就是切换第三高位。这很重要。
那么,关于代码的作用!为简单起见,我只假设输入字符串是“a Z”,因此所需的输出将是“A z”。请注意,空格是字符32或00100000。
a Z: 01100001 00100000 01011010
首先,代码将字符串转换为大写:
A Z: 01000001 00100000 01011010
然后,它将字符串转换为小写:
a z: 01100001 00100000 01111010
接下来,它对大写和小写字符串进行异或运算:
A Z: 01000001 00100000 01011010
a z: 01100001 00100000 01111010
^1 : 00100000 00000000 00100000
现在它对原始字符串进行XOR:
^1 : 00100000 00000000 00100000
a Z: 01100001 00100000 01011010
^2 : 01000001 00100000 01111010
将其转换回字符,然后得到...... A z
。案例颠倒的原始字符串。
天才,对吧?
答案 1 :(得分:2)
逐个分割字符串的字符,如
$arr = str_split('yourname');
结果将是
Array
(
[0] => y
[1] => o
[2] => u
[3] => r
[4] => n
[5] => a
[6] => m
[7]=> e
)
在一个循环中逐个获取数组的元素并检查它是否在小型转换为Alphabat,反之亦然
strtolower()
和strtoupper();
个函数。
答案 2 :(得分:0)
将字符串的所有字符转换为数组,然后单独处理它们。
$str = 'I didN\'t gEt anY dEsseRt';
$chars = str_split($str); //make an array out of the string
foreach ($chars as $char){
if (ctype_lower($char)) //is lowercase
strtoupper ($char); //make uppercase
if (ctype_upper($char)) //is uppercase
strtolower ($char); //make lowercase
}
$opposite = implode ('', $chars); //convert back into string