Algoritmo PHP para generar todas las combinaciones de un tamaño específico a partir de un solo conjunto

Estoy tratando de deducir un algoritmo que genera todas las combinaciones posibles de un tamaño específico, algo así como una función que acepta una matriz de caracteres y tamaño como su parámetro y devuelve una matriz de combinaciones.

Ejemplo: Digamos que tenemos un conjunto de caracteres: Conjunto A = {A, B, C}

a) Todas las combinaciones posibles de tamaño 2: (3 ^ 2 = 9)

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

b) Todas las combinaciones posibles de tamaño 3: (3 ^ 3 = 27)

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

Tenga en cuenta que el tamaño del par puede ser mayor que el tamaño total de la población. Ex. Si el conjunto contiene 3 caracteres, también podemos crear una combinación de tamaño 4.

EDITAR: También tenga en cuenta que esto es diferente de la permutación. En permutación no podemos tener caracteres repetidos, por ejemplo, AA no puede aparecer si usamos el algoritmo de permutación. En estadística se conoce como muestreo.

Respuestas a la pregunta(3)

Su respuesta a la pregunta