Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Listowanie każdej możliwości ciągu znaków
Forum PHP.pl > Forum > PHP
Athlan
Mam mały problem. Potrzebuję skrypt, który wypisze wszystkie możliwości ciągu znaków z podanej tablicy znaków o określonej długości, np.

mamy litery i długość ciągu:

$chars = array('a','b','c');
$lenght = 4;

teraz z tych danych powinno kolejno powstawać:

Kod
a
aa
aaa
aaaa
b
bb
bbb
bbbb
c
cc
ccc
cccc
ab
ac
abab
acac
ba
bc
baba
bcbc


itd.

Efekt chyba podobny do brutalnego ataku. Muszę wypisać wszystkie możliwości zanków w ciągu o podanej długości.
Pisałem już wiele funkcji takich jak ta:

  1. <?
  2.  
  3. $chars = array('a','b','c');
  4. $lenght = 5;
  5.  
  6. function explore($j,$m){
  7. global $chars, $lenght;
  8.  
  9. foreach($chars as $char){
  10. $j++;
  11.  
  12. for($i = 0; $i < $m; $i++){
  13.  
  14. if($j == count($chars)){
  15. $m++;
  16. explore($j,$m);
  17. }
  18. else
  19. {
  20. echo $char.'-'.$j.'|';
  21. }
  22. }
  23.  
  24. echo'<br>';
  25.  
  26. }
  27.  
  28. }
  29.  
  30. explore(0,1);
  31.  
  32. ?>

ale kompletnie mi nie wychodzi?
Jak mam to zrobić?
hwao
Wydaje mi sie ze mozna by to bylo ladnie rekurecja zrobic (ale nie bylo by tych "bez znakowych mozliwosci" czyli proponowal bym tak

  1. <?php
  2.  
  3. /**
  4. * @param array tablica z znaczkami
  5. * @param int ile ma byc w sumie tych znakow
  6. * @param int status, czyli ile juz jest znaczkow
  7. */
  8. function iha( $a, $i, $s=) {
  9. $b = null;
  10. if( $i != $s ) {
  11. foreach( $a As $v ) {
  12.  $b .= $v. iha( $a, $i, ++$s );
  13. } else {
  14.  return $b;
  15. }
  16. }
  17. $chars = array('a','b','c', '');
  18. $lenght = 4;
  19.  
  20. echo iga( $chars, $lenght );
  21.  
  22.  
  23. ?>

Nie daje glowy ze to dziala biggrin.gif to wczesny proptotyp winksmiley.jpg trzeba by popoprawiac go smile.gif
Athlan
mi on nawet odpalić nie chce... poprawiałem tam co nieco i cały czas to samo:
Cytat
Parse error: parse error in c:\apache\htdocs\a.php on line 13
dr_bonzo
Oj, popraw sobie ten kod -- byl pisany na zywo bez sprawdzania (prawdopodobnie)
  1. <?php
  2. function iha( $a, $i, $s=)
  3. {
  4. $b = null;
  5. if( $i != $s )
  6. {
  7. foreach( $a As $v )
  8. {
  9. $b .= $v. iha( $a, $i, ++$s );
  10. }
  11. }// BRAKOWALO KLAMRY
  12. else
  13. {
  14. return $b;
  15. }
  16. }
  17. ?>
hwao
Wszytkie mozliwoosci otrzymasz czyms takim
  1. <?php
  2.  
  3. /**
  4. * @param array tablica z znaczkami
  5. * @return array mieszanka wedlo... :)
  6. */
  7.  
  8. function iha( $x ) {
  9. $a = array();
  10.  
  11. foreach( $x As $v ) {
  12. $s1 = $v;
  13. foreach( $x As $v ) {
  14. $s2 = $s1.$v;
  15. foreach( $x As $v ) {
  16. $s3 = $s2.$v;
  17. foreach( $x As $v ) {
  18. $s4 = $s3.$v;
  19. $a[] = $s4;
  20. }
  21. $s3 = $s2;
  22. }
  23. $s2 = $s1;
  24. }
  25.  
  26. }
  27.  return $a;
  28. }
  29.  
  30. $chars = array( 'a','b','c', '' );
  31.  
  32. var_dump( iha( $chars ) );
  33.  
  34.  
  35. ?>


nie bialem czasu zrobic to na rekurecji a bylo by ladniej...
Athlan
Dobra, poskładałem sobie takie coś:

  1. <?php
  2.  
  3. /**
  4. * @param array tablica z znaczkami
  5. * @param int ile ma byc w sumie tych znakow
  6. * @param int status, czyli ile juz jest znaczkow
  7. */
  8. function iga( $a, $i, $s=)
  9. {
  10. $b = null;
  11. if( $i != $s )
  12. {
  13. foreach( $a As $v )
  14. {
  15. $b .= $v. iga( $a, $i, ++$s );
  16. }
  17. }
  18. else
  19. {
  20. return $b;
  21. }
  22. }
  23.  
  24. $chars = array('a','b','c', '');
  25. $lenght = 4;
  26.  
  27. echo iga($chars, $lenght);
  28.  
  29. ?>


I mi errora 500 wywala, co mam zrobić?

P.S. Często tak mam ;p
hwao
Musisz miec cos zle skonfigurowane w serwerze smile.gif

Nagraj sobie gotowa paczke WAMP (w google wamp +server) i masz paczke z php mysql i apache dzialajaco odrazu.
Athlan
ale jak funkcje wywale to plik dziala... coś czuje że on sam sobie patrzy czy się nie zapętli i nie wyświetli takiego niebezpiecznego pliku - moje zdanie smile.gif
hwao
nie, to musi byc cos zle z serwerem ustawione smile.gif

http://www.codestyle.org/sitemanager/apache/errors-500.shtml
Athlan
Cytat(hwao @ 2006-04-26 17:37:47)
nie, to musi byc cos zle z serwerem ustawione smile.gif

Tylko dla linków typu obszernego listowania czegokolwiek mam error 550... może mam za słabe php? (4.3.1)
hwao
Dziwne, nie powinno tak sie takie cos pojawiac (nawet mimo wersji php, chyba ze byl jakis bug).

Co rozumiesz przez obszerne?

Jak chcesz, to mozesz sie odezwac na prv (gg/jabber/tlen) latwiej bedzie sie dogadac, moze sie uda ustalic co jest nie tak.
Athlan
W logach mam takiego errora:
Cytat
[notice] child pid nr_pida exit signal segmentation fault (11)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.