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
爵特猛