Wygeneruj wszystkie możliwe kombinacje za pomocą zestawu łańcuchów

Próbuję wygenerować wszystkie możliwe kombinacje zestawu ciągów, używając maksymalnie jednego ciągu znaków.

Długość łańcucha wyjściowego nie jest zdefiniowana (maksymalna długość to liczba podanych ciągów, ponieważ można ich używać tylko raz)Na przykład stringsetarray('A','B') wygenerowałoby A, B, AB, BA.Na przykład stringsetarray('ABC', 'Z') wygenerowałoby „ABC”, „Z”, „ZABC” i „ABCZ”.Zestaw znaków może mieć identyczne wpisy, a dane wyjściowe nie muszą być unikalne. Na przykład zestaw znakówarray('A', 'A') wygenerowałoby „A”, „A”, „AA”, „AA”; (Właściwie nie potrzebuję duplikatów, ale nie chcę, żeby było to trudniejsze)

Wiem, że 2 łańcuchy mają 4 kombinacje (2 => 4) i 3 => 15, 4 => 64, 5 => 325 ...

Ponieważ nie jestem programistą, uznałem to za co najmniej „trudne”. Zagnieżdżone pętle, gdzie wkrótce będą zbyt skomplikowane. Łatwiejszym rozwiązaniem może być znalezienie wzoru w indeksach tablicy z łańcuchami. Ale to daje mi podwójne użycie ciągów ...

  $strings = array('T','O','RS');
  $num = 0;
  $stringcount = count($strings);
  $variations = array(0,1,4,15,64,325,1956,13699,109600,986409);

  for($i=0;$i<$variations[$stringcount];$i++){
    $index = base_convert($num, 10, $stringcount);
    $array_of_indexes = str_split($index);
    $out='';
    for($j=0;$j<count($array_of_indexes);$j++){
     $out .= $strings[$array_of_indexes[$j]];
    }
    echo $out . '<br />';
    $num++;
  }

Wynik: T O RS OT OO ORS RST RSO RSRS OTT OTO OTRS OOT OOO OORS

Nie dobrze, wiele duplikatów + wiele ważnych kombinacji nie jest uwzględnionych

Wiem, że to rozwiązanie jest błędne na wiele sposobów, ale nie wiem od czego zacząć? Jakieś sugestie? Thx in Advance!

questionAnswers(4)

yourAnswerToTheQuestion