Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-字符串的所有大小写组合字符_Php_Combinations_Uppercase_Lowercase - Fatal编程技术网

PHP-字符串的所有大小写组合字符

PHP-字符串的所有大小写组合字符,php,combinations,uppercase,lowercase,Php,Combinations,Uppercase,Lowercase,我尝试获取字符串的所有大小写组合字符。例如,我的字符串是abc。我需要得到这样的结果,3个字符串的所有组合:(2^0)x(2^1)x(2^2)=8: abc Abc ABc ABC aBC abC AbC aBc 我的代码是这样的,但我有一个问题,我的代码有重复的案例,并且没有返回AbC和AbC: <?php function opposite_case($str) { if(ctype_upper($str)) { return strtolow

我尝试获取字符串的所有大小写组合字符。例如,我的字符串是
abc
。我需要得到这样的结果,3个字符串的所有组合:
(2^0)x(2^1)x(2^2)=8

abc
Abc
ABc
ABC
aBC
abC
AbC
aBc
我的代码是这样的,但我有一个问题,我的代码有重复的案例,并且没有返回
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实现转换而来的-

2020年11月-此答案在两处更新。有关详细信息,请参阅修订历史记录。

<?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'));

@chris85我的代码有重复的大小写,不返回
AbC
AbC
这是一个Java实现(**粘贴可疑**):@ka_lin BIG LIKE谢谢亲爱的,我将这个Java答案转换为PHP,工作得很好。谢谢,亲爱的。几秒钟前,我看到了这个Java注释,并将其转换为PHP。再次感谢。这有点旧了,但因为它是最热门的搜索结果之一,所以这里就开始了。虽然最初的Java实现是正确的,但这个实现似乎有两个bug。1) for循环的初始值应该从0开始,否则结果中将丢失初始字符串。2) 可能的排列数是字符串长度的2次方,而不是相反。@DiogoTeixeira-你确实是对的。谢谢你指出这一点。我已经更新了答案。