Znalazłem gotowa funkcję anagramy na forum php. Problem jest taki, że działa ok ale dla n-elementowego ciągu nie generuje kombinacji od 1 do n-1 znaków. Zaprezentuje to na kodzie php:

Dla ciągu 1234, potrzebuje mieć wygenerowane następujące kombinacje(po przecinku) jako wejście dla funkcji anagramy:
1, 2, 3, 4, 12, 13, 14, 123, 124, 324, 1234
Może da się to zrobić zupełnie inaczej nie używając funkcji anagramy

  1. function anagramy($wyraz) {
  2.  
  3.  
  4. for ($i=0; $i<strlen($wyraz); $i++) { //obliczamy dlugosc przekazanego ciagu
  5. $znak=$wyraz[$i]; //przypisujemy kolejne znaki z ciagu do zmiennej znak
  6. $ile=count($tmp); //jesli tmp nie istnieje a tak jest przy pierwszej iteracji to ustawiamy ile na zero
  7.  
  8. if ($ile==0) $tmp[]=$znak; //jesli tmp=0 to zmiennej tablicowej tmp przypisujemy znak z ciagu
  9.  
  10. else { //w innym przypadku..
  11. for($k=0;$k<$ile;$k++) { //robimy petle w petli
  12. $ciag=$tmp[$k];
  13. for($j=0;$j<=1;$j++) {
  14. $new[]= substr($ciag,0,$j).$znak.substr($ciag,$j);
  15. }
  16. }
  17. $tmp=$new;
  18. $new="";
  19. }
  20. }
  21.  
  22.  
  23. return $tmp;
  24. }
  25.  
  26.  
  27. $ccc = "1234";
  28. $ilosc_znakow = strlen($ccc);
  29. $bbb = array();
  30. $table = array();
  31.  
  32. for ($licznik=1; $licznik < $ilosc_znakow+1; $licznik++) {
  33.  
  34. for ($pp=0; $pp<$ilosc_znakow; $pp++) {
  35.  
  36. $bbb[] = substr($ccc, $pp, $licznik);
  37. }
  38.  
  39.  
  40. }
  41.  
  42.  
  43. $bbb = array_unique($bbb);
  44. $ilosc_wyrazow = count($bbb);
  45.  
  46.  
  47. for ($tt=0; $tt<$ilosc_wyrazow; $tt++) {
  48. $tmp = anagramy($bbb[$tt]);
  49. for ($i=0;$i<count($tmp);$i++) {
  50. echo $tmp[$i]."<br>";
  51. }
  52. }
  53.