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

时间:2017-06-23 15:05:11

标签: php combinations uppercase lowercase

我尝试获取字符串的所有组合大小写字符。例如,我的字符串是(2^0) x (2^1) x (2^2) = 8。我需要得到这样的结果,字符串的3个字符的所有组合: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>"; } } ?>

{{1}}

1 个答案:

答案 0 :(得分:1)

一些代码转储,其中包含一些注释,以便进行测量。这是从Java实现转换而来的 - https://stackoverflow.com/a/6785649/296555

http://sandbox.onlinephpfunctions.com/code/000e55236510216aa499dc54e092c94853f82b00

<?php

function calculatePermutations($text) {

    $permutations = array();
    $chars = str_split($text);

    // Count the number of possible permutations and loop over each group 
    for ($i = 1; $i < strlen($text) ** 2; $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'));