PHP 获取给定的字符排列出的所有组合

  • 爵特猛
  • 2021-1-13 11:28
  • PHP
  • 921
/**
* permutations
* @param string $letters 字符串
* @param int $num 组合成的长度
* @return array
*/
function permutations($letters,$num){
    $last = str_repeat($letters{0},$num);
    $result = array();
    while($last != str_repeat(lastchar($letters),$num)){
        $result[] = $last;
        $last = char_add($letters,$last,$num-1);
    }
    $result[] = $last;
    return $result;
}

function char_add($digits,$string,$char){
    if($string{$char} <> lastchar($digits)){
        $string{$char} = $digits{strpos($digits,$string{$char})+1};
        return $string;
    }else{
        $string = changeall($string,$digits{0},$char);
        return char_add($digits,$string,$char-1);
    }
}

function lastchar($string){
    return $string{strlen($string)-1};
}

function changeall($string,$char,$start = 0,$end = 0){
    if($end == 0) $end = strlen($string)-1;
    for($i=$start;$i<=$end;$i++){
        $string{$i} = $char;
    }
    return $string;
}


使用:

$str = 'ABC';
$data = permutations($str,3);//列出ABC所有长度为3的排列组合
print_r($data);


显示结果:

Array
(
    [0] => AAA
    [1] => AAB
    [2] => AAC
    [3] => ABA
    [4] => ABB
    [5] => ABC
    [6] => ACA
    [7] => ACB
    [8] => ACC
    [9] => BAA
    [10] => BAB
    [11] => BAC
    [12] => BBA
    [13] => BBB
    [14] => BBC
    [15] => BCA
    [16] => BCB
    [17] => BCC
    [18] => CAA
    [19] => CAB
    [20] => CAC
    [21] => CBA
    [22] => CBB
    [23] => CBC
    [24] => CCA
    [25] => CCB
    [26] => CCC
)


本文为爵特猛原创文章,转载无需和我联系,但请注明来自爵特猛博客www.juetemeng.com