Я ищу, чтобы создать функцию, которая будет возвращать каждую возможную строку в пределах заданной длины строки, используя кодировку.
В качестве примера, набор символов «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
Что вы сделали в своей голове, чтобы придумать это решение? Вы должны были помнить несколько вещей:
Каков характер, с которого я должен начать с кодировки?
как я строю выходную строку, каков следующий символ из набора символов?
сколько символов я могу выбрать из набора символов?
что я должен делать, когда я выбрал из charset все символы, которым мне разрешено?
я исчерпал харсет по отношению к символам, с которых я могу начать? если да, я закончен.
Можете ли вы перевести это в код? Или этот ответ слишком чересчур?