# PHPalgorithm从一个集合中生成一个特定大小的所有组合

a）大小2的所有可能的组合：（3 ^ 2 = 9）

``AA, AB, AC BA, BB, BC CA, CB, CC` `

b）尺寸3的所有可能的组合：（3 ^ 3 = 27）

` `AAA, AAB, AAC, ABA, ABB, ACC, CAA, BAA, BAC, .... ad so on total combinations = 27` `

` `function sampling(\$chars, \$size, \$combinations = array()) { # if it's the first iteration, the first set # of combinations is the same as the set of characters if (empty(\$combinations)) { \$combinations = \$chars; } # we're done if we're at size 1 if (\$size == 1) { return \$combinations; } # initialise array to put new values in \$new_combinations = array(); # loop through existing combinations and character set to create strings foreach (\$combinations as \$combination) { foreach (\$chars as \$char) { \$new_combinations[] = \$combination . \$char; } } # call same function again for the next iteration return sampling(\$chars, \$size - 1, \$new_combinations); } // example \$chars = array('a', 'b', 'c'); \$output = sampling(\$chars, 2); var_dump(\$output); /* array(9) { [0]=> string(2) "aa" [1]=> string(2) "ab" [2]=> string(2) "ac" [3]=> string(2) "ba" [4]=> string(2) "bb" [5]=> string(2) "bc" [6]=> string(2) "ca" [7]=> string(2) "cb" [8]=> string(2) "cc" } */` `

` `\$array_elems_to_combine = array('A', 'B', 'C'); \$size = 4; \$current_set = array(''); for (\$i = 0; \$i < \$size; \$i++) { \$tmp_set = array(); foreach (\$current_set as \$curr_elem) { foreach (\$array_elems_to_combine as \$new_elem) { \$tmp_set[] = \$curr_elem . \$new_elem; } } \$current_set = \$tmp_set; } return \$current_set;` `

` `A, B, C` `

` `(A, B, C) + A = AA, BA, CA (A, B, C) + B = AB, BB, BC (A, B, C) + C = AC, CB, CC` `

` `function comb (\$n, \$elems) { if (\$n > 0) { \$tmp_set = array(); \$res = comb(\$n-1, \$elems); foreach (\$res as \$ce) { foreach (\$elems as \$e) { array_push(\$tmp_set, \$ce . \$e); } } return \$tmp_set; } else { return array(''); } } \$elems = array('A','B','C'); \$v = comb(4, \$elems);` `