Để tạo tất cả tổ hợp kích thước cụ thể từ một tập hợp đơn lẻ, mã như sau:
Ví dụ
function sampling($chars, $size, $combinations = array()) {
// trường hợp lần lặp đầu, tổ hợp đầu tiên giống tập ký tự
if (empty($combinations)) {
$combinations = $chars;
}
// size 1 nghĩa là xong
if ($size == 1) {
return $combinations;
}
// khởi tạo mảng để chứa giá trị mới
$new_combinations = array();
// lặp qua tổ hợp hiện tại và tập ký tự để tạo chuỗi
foreach ($combinations as $combination) {
foreach ($chars as $char) {
$new_combinations[] = $combination . $char;
}
}
// gọi lại hàm cho lần lặp tiếp theo
return sampling($chars, $size - 1, $new_combinations);
}
$chars = array('a', 'b', 'c');
$output = sampling($chars, 2);
var_dump($output);
Kết quả
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 thấy cùng tập ký tự được hiển thị. Nếu size là 1, tổ hợp được hiển thị. Mảng được khởi tạo là 'new_combinations' và lặp qua bằng 'forloop', mọi ký tự trong chuỗi được nối với mọi ký tự khác. Hàm 'sampling' được gọi với tham số (chuỗi, kích thước chuỗi và mảng).