Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: generowanie tekstu do liczby
Forum PHP.pl > Forum > PHP
JOHNY
Witam
Mam pytanie jak najprościej stworzyć takiego. Mam jakąś liczbę z bazy i chce do niej wygenerować tekst. EX

1 test
2 testy
....
5 testów ect. chce żeby mi do tanej liczby generował skrypt odpowienio domienioty tekst
macza
pobierasz z bazy np.: $liczba
dalej przekazujesz:
  1. <?php
  2. if($liczba==1){ echo'jeden'; }
  3. itd
  4. ?>
tiraeth
Czy chodzi Ci o utworzenie przypadków do danego słowa? Pozostaje pseudo-słownik do tworzenia przypadków, ale nie będzie to chyba nigdy idealnie zrobione...
JOHNY
Cytat(tiraeth @ 2006-05-06 23:38:29)
Czy chodzi Ci o utworzenie przypadków do danego słowa? Pozostaje pseudo-słownik do tworzenia przypadków, ale nie będzie to chyba nigdy idealnie zrobione...

Raczej na odwrót stworzenie słowa odpowiednio odmienionego dla danej liczby.
Generalnie chyba przypadków jest niewiele w zasadzie:
1 - test
2 - testy
3 - testy
4 - testy
5 - testów
Chyba by to tak wygłądało najrozsądniej
  1. <?php
  2. if($liczba==1){ echo'test'; }
  3. elseif($liczba==2){ echo'testy'; }
  4. elseif($liczba==3){ echo'testy'; }
  5. elseif($liczba==4){ echo'testy'; }
  6. elseif($liczba>=5){ echo'testów'; }
  7. ?>


Ale jeśli ktoś ma lepszy pomysł bardziej udoskonalony to proszę o sugestie
kwiateusz
moze na switchu to oprzec zawsze troche mniej pisania winksmiley.jpg ni z elseif'ami ...
matrach
Oto funkcja:
  1. <?php
  2. function konc($liczba)
  3. {
  4. //$kon to koncówki
  5. $kon[0] = '';
  6. $kon[1] = 'y';
  7. $kon[2] = 'ów';
  8. switch($liczba)
  9. {
  10. case 1: return $kon[0]; break;
  11. case 2: case 3: case 4: return $kon[1]; break;
  12. default: return $kon[2];
  13. }
  14. }
  15. ?>
mike
~JOHNY i długo byś tak tymi ifami wymieniał tongue.gif

Możesz coś takiego w tym stylu zrobic:
  1. <?php
  2.  
  3. function Ow( $strWord, $intNumber = 1 )
  4. {
  5. $intNumber %= 10;
  6.  
  7. switch( $intNumber )
  8. {
  9. case 1:
  10. $strSufix = '';
  11. break;
  12. case ( $intNumber >= 2 && $intNumber <= 4 ):
  13. $strSufix = 'y';
  14. break;
  15. case 0:
  16. case ( $intNumber >= 5 && $intNumber <= 9 ):
  17. $strSufix = 'ów';
  18. break;
  19. }
  20.  
  21. return $strWord . $strSufix;;
  22. }
  23.  
  24. echo Ow( 'test', 1 );
  25. echo Ow( 'test', 123 );
  26. echo Ow( 'test', 12 );
  27. echo Ow( 'test', 16 );
  28.  
  29. ?>
JOHNY
No fakt mike_mech zapomniałem że 123 też będzie mieć inną odmiane. Super skrypcik bardzo mi się przyda z bardzo ważnej przyczyny

  1. <?php
  2. echo Ow( 'test', $ile );
  3. ?>


Także z jednej funkcji mogę skorzystać wiele razy wpisując sobie tylko inne zmienne $ile1 ect.

Kod
Zauważyłem że jak jest 0 to wyświetla "y". Gdzie to można poprawić questionmark.gif
mike
Cytat(JOHNY @ 2006-05-07 12:22:03)
Kod
Zauważyłem że jak jest 0 to wyświetla "y". Gdzie to można poprawić questionmark.gif

Hmm, dziwne. Nie wiem dlaczego tak się dzieje.

Ale jak zamieniłem miejscami bloki to działa poprawnie:
  1. <?php
  2.  
  3. function Ow( $strWord, $intNumber = 1 )
  4. {
  5. $intNumber %= 10;
  6.  
  7. switch( $intNumber )
  8. {
  9. case 1:
  10. $strSufix = '';
  11. break;
  12. case 0:
  13. case ( $intNumber >= 5 && $intNumber <= 9 ):
  14. $strSufix = 'ów';
  15. break;
  16. case ( $intNumber >= 2 && $intNumber <= 4 ):
  17. $strSufix = 'y';
  18. break;
  19. }
  20.  
  21. return $strWord . $strSufix;
  22. }
  23.  
  24. echo Ow( 'test', 0 );
  25.  
  26. ?>
JOHNY
Wielki dzięki mike_mech a także reszcie chłopaków za pomoc.
Ale i tak przy 11 nie trybi smile.gif
matrach
Nie tylko 11
Jeśli sie wywoła:
  1. <?php
  2. echo Ow( 'test', 1 ) . '<br />';
  3. echo Ow( 'test', 11 ) . '<br />';
  4. echo Ow( 'test', 51 ) . '<br />';
  5. echo Ow( 'test', 111 ) . '<br />';
  6. ?>

Daje zawsze 'test' a chyba powinno być:
1 test
11 testów
51 testów
111 testów
mike
Echh, zapomniałem o tym :/
Update nr 2

  1. <?php
  2.  
  3. function Ow( $strWord, $intNumber = 1 )
  4. {
  5. $intRest = $intNumber % 10;
  6.  
  7. switch( $intRest )
  8. {
  9. case 0:
  10. case ( ( $intRest >= 5 && $intRest <= 9 ) || ( $intRest == 1 && $intNumber > 10 ) ):
  11. $strSufix = 'ów';
  12. break;
  13. case ( $intRest == 1 && $intNumber < 10 ):
  14. $strSufix = '';
  15. break;
  16. case ( $intRest >= 2 && $intRest <= 4 ):
  17. $strSufix = 'y';
  18. break;
  19. }
  20.  
  21. return $strWord . $strSufix;
  22. }
  23.  
  24. echo Ow( 'test', 0 );
  25. echo '<br />';
  26. echo Ow( 'test', 3 );
  27. echo '<br />';
  28. echo Ow( 'test', 1 );
  29. echo '<br />';
  30. echo Ow( 'test', 11 );
  31. echo '<br />';
  32. echo Ow( 'test', 29 );
  33. echo '<br />';
  34. echo Ow( 'test', 23 );
  35.  
  36. ?>
JOHNY
No teraz to juz chyba nie ma się do czego przyczepić smile.gif Wypasiony na maxa skrypt
Super robota mike_mech - działa jak natura chciała smile.gif
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.