Để tạo tất cả các kết hợp có kích thước cụ thể từ một tập hợp duy nhất, mã như sau -
Ví dụ
function sampling($chars, $size, $combinations = array()) { # in case of first iteration, the first set of combinations is the same as the set of characters if (empty($combinations)) { $combinations = $chars; } # size 1 indicates we are done if ($size == 1) { return $combinations; } # initialise array to put new values into it $new_combinations = array(); # loop through the existing combinations and character set to create strings foreach ($combinations as $combination) { foreach ($chars as $char) { $new_combinations[] = $combination . $char; } } # call the same function again for the next iteration as well return sampling($chars, $size - 1, $new_combinations); } $chars = array('a', 'b', 'c'); $output = sampling($chars, 2); var_dump($output);
Đầu ra
Điều này sẽ tạo ra kết quả sau -
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" }
Lần lặp đầu tiên cho biết cùng một bộ ký tự sẽ được hiển thị. Nếu kích thước là 1, thì kết hợp được hiển thị. Một mảng được khởi tạo dưới dạng ‘new_combaries’ và nó được lặp lại bằng cách sử dụng ‘forloop’ và mọi ký tự trong chuỗi đó được nối với mọi ký tự khác. Hàm ‘lấy mẫu’ được gọi với các tham số (chuỗi, kích thước của chuỗi và mảng).