все комбинации строк фиксированной длины, основанные на кодировке

Я ищу, чтобы создать функцию, которая будет возвращать каждую возможную строку в пределах заданной длины строки, используя кодировку.

В качестве примера, набор символов «abc» и длина 2 должны допускать уникальные комбинации 9 (3 ^ 2):

aa, ab, ac, ba, bb, bc, ca, cb, cc

(Список создается вручную)

Какой метод можно использовать для создания такой функции?

Как всегда, есть несколько способов решить то, о чем вы просите, это только один способ, используя один счетчик для каждого символа в выходной строке:

$c = "abc"; // charset $l = 2; // string length for($t='',$cl=strlen($c),$s=array_fill(0,$l,0),$i=pow($cl,$l);$a=0,$i--;) { for($t&&$t.=', ';$a<$l;$t.=$c[$s[$a++]]); for(;$a--&&++$s[$a]==$cl;$s[$a]=0); }; echo $t; // the string you asked for. 

aa, ab, ac, ba, bb, bc, ca, cb, cc

Один основной цикл, один цикл для построения строки и один цикл для подсчета.

Я могу представить, что это должно работать с получением по модулю за каждую позицию выходной строки.

Вы уже делали это, как мы можем ясно видеть из вашего примера решения:

aa, ab, ac, ba, bb, bc, ca, cb, cc

Что вы сделали в своей голове, чтобы придумать это решение? Вы должны были помнить несколько вещей:

  1. Каков характер, с которого я должен начать с кодировки?

  2. как я строю выходную строку, каков следующий символ из набора символов?

  3. сколько символов я могу выбрать из набора символов?

  4. что я должен делать, когда я выбрал из charset все символы, которым мне разрешено?

  5. я исчерпал харсет по отношению к символам, с которых я могу начать? если да, я закончен.

Можете ли вы перевести это в код? Или этот ответ слишком чересчур?