PHP - 字符串的所有大小写字符组合
PHP - all combination upper and lower case characters of string
我尝试获取字符串的所有大小写字符组合。例如我的字符串是 abc
。我需要得到这样的结果,字符串的 3 个字符的所有组合:(2^0) x (2^1) x (2^2) = 8
:
abc
Abc
ABc
ABC
aBC
abC
AbC
aBc
我的代码是这样的,但我有一个问题,我的代码有重复的情况,而不是 return AbC
和 aBc
:
<?php
function opposite_case($str)
{
if(ctype_upper($str))
{
return strtolower($str);
}
else
{
return strtoupper($str);
}
}
$str = "abc";
for($i = 0 ; $i < strlen($str) ; $i++)
{
for($j = 0 ; $j < strlen($str) ; $j++)
{
$str[$j] = opposite_case($str[$j]);
echo $str."<br>";
}
}
?>
一些代码转储,其中包含一些注释以备不时之需。这是从 Java 实现转换而来的 -
http://sandbox.onlinephpfunctions.com/code/aadefa26561a0e33c48fd1d147434db715c8fc59
2020 年 11 月 - 此答案已更新 2 个地方。详情见修订历史。
<?php
function calculatePermutations($text) {
$permutations = array();
$chars = str_split($text);
// Count the number of possible permutations and loop over each group
for ($i = 0; $i < 2 ** strlen($text); $i++) {
// Loop over each letter [a,b,c] for each group and switch its case
for ($j = 0; $j < strlen($text); $j++) {
// isBitSet checks to see if this letter in this group has been checked before
// read more about it here: http://php.net/manual/en/language.operators.bitwise.php
$permutations[$i][] = (isBitSet($i, $j))
? strtoupper($chars[$j])
: $chars[$j];
}
}
return $permutations;
}
function isBitSet($n, $offset) {
return ($n >> $offset & 1) != 0;
}
print_r(calculatePermutations('abc'));
我尝试获取字符串的所有大小写字符组合。例如我的字符串是 abc
。我需要得到这样的结果,字符串的 3 个字符的所有组合:(2^0) x (2^1) x (2^2) = 8
:
abc
Abc
ABc
ABC
aBC
abC
AbC
aBc
我的代码是这样的,但我有一个问题,我的代码有重复的情况,而不是 return AbC
和 aBc
:
<?php
function opposite_case($str)
{
if(ctype_upper($str))
{
return strtolower($str);
}
else
{
return strtoupper($str);
}
}
$str = "abc";
for($i = 0 ; $i < strlen($str) ; $i++)
{
for($j = 0 ; $j < strlen($str) ; $j++)
{
$str[$j] = opposite_case($str[$j]);
echo $str."<br>";
}
}
?>
一些代码转储,其中包含一些注释以备不时之需。这是从 Java 实现转换而来的 -
http://sandbox.onlinephpfunctions.com/code/aadefa26561a0e33c48fd1d147434db715c8fc59
2020 年 11 月 - 此答案已更新 2 个地方。详情见修订历史。
<?php
function calculatePermutations($text) {
$permutations = array();
$chars = str_split($text);
// Count the number of possible permutations and loop over each group
for ($i = 0; $i < 2 ** strlen($text); $i++) {
// Loop over each letter [a,b,c] for each group and switch its case
for ($j = 0; $j < strlen($text); $j++) {
// isBitSet checks to see if this letter in this group has been checked before
// read more about it here: http://php.net/manual/en/language.operators.bitwise.php
$permutations[$i][] = (isBitSet($i, $j))
? strtoupper($chars[$j])
: $chars[$j];
}
}
return $permutations;
}
function isBitSet($n, $offset) {
return ($n >> $offset & 1) != 0;
}
print_r(calculatePermutations('abc'));