Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: odmiana liczebników
Forum PHP.pl > Forum > Gotowe rozwiązania
Cysiaczek
Witam.

Szukam skryptu odmiany liczebników. Jeśli jakaś dobra duszyczka dysponuje, to będe wdzięczny, jak nie, to trudno - napiszę sam ;|

Przykład:
1 produkt
12 produktów
34 produkty

Pozdrawiam.
tomeksobczak
nie wiem czy to mozna nazwac az skryptem

  1. <?php
  2. $koniec = substr( (string) $ilosc, -);
  3. if( $ilosc == 1 )
  4. { PRODUKT }
  5. elseif( $ilosc > 20 && in_array( $koniec, array( '2', '3', '4' ) )
  6. { PRODUKTY }
  7. else
  8. { PRODUKTÓW }
  9. ?>
Cysiaczek
Dzięki Ci.
Mimo, że podałeś błędną w implementację, to 90% założeń było dobre.
Poprawione wygląda i działa tak.
  1. <?php
  2. if($ilosc == 1 )
  3. {
  4. $nPart=' produkt';
  5. }
  6. elseif($ilosc <= 20 && $ilosc>4)
  7. {
  8. $nPart=' produktów';
  9. }
  10. elseif(in_array($koniec, array( 2, 3, 4)))
  11. {
  12. $nPart=' produkty';
  13. }
  14. else
  15. {
  16. $nPart=' produktów';
  17. }
  18. ?>


Pozdrawiam.
tomeksobczak
&pisałem z pamięci ;]

ale Twoja poprawka tez nie jest poprawna w 100%
[ 112 -> 112 produkty ] - problem pojawia sie po kazdej setce tak więc

  1. <?php
  2. $koniec  = substr( (string) $ilosc, -);
  3. $koniec2 = (;$ilosc > 9 ) ? substr( (string) $ilosc, -) : 1;
  4. if( $ilosc == 1 )
  5. { PRODUKT }
  6. elseif( ( (int) $koniec2 > 20 ) && in_array( $koniec, array( '2', '3', '4' ) )
  7. { PRODUKTY }
  8. else
  9. { PRODUKTÓW }
  10. ?>


teraz juz chyba powinno dzialac bez problemów


P.S.

po chwili widze ze moje znow nie dziala przy 102, 103, 104 ;]
Cosi*
Panowie,
Najpierw modulo 100, a potem reguła:
Kod
R = 1 -> produkt
(R mod 10 = 2,3,4) & (R != 12,13,14) -> produkty
else -> produktów

Tylko zaimplementować i powinno działać biggrin.gif
Pozdrawiam

PS. Poprawka smile.gif Warunek R = 1 powinien się znaleźć przed modulo 100.
eteropczyk
dla potomnych smile.gif
  1.  
  2. function sklep_koszyk_odmiana($ile)
  3. {
  4. $r1=$ile % 100;
  5. if ($r1 == 1 && $ile < 100)
  6. {
  7. $p='produkt'; $z='znajduje';
  8. }
  9. else
  10. {
  11. $r2=$r1 % 10;
  12. if (($r2 > 1 && $r2 < 5) && ($r1 < 12 || $r1 > 14))
  13. {
  14. $p='produkty'; $z='znajdują';
  15. }
  16. else
  17. {
  18. $p='produktów'; $z='znajduje';
  19. }
  20. }
  21. return array($p,$z);
  22. }
  23.  



test:

  1.  
  2. for ($i=0;$i<300;$i++)
  3. {
  4. list($p,$z)=sklep_koszyk_odmiana($i);
  5. echo 'W koszyku '.$z.' się '.$i.' '.$p.'<br />'."\n";
  6. }
  7.  
Crozin
Od takich rzeczy to jest http://pl.php.net/manual/en/class.messageformatter.php
Fifi209
Crozin... Ten temat jest z 2007 roku. ;]

Cytat
This extension is bundled with PHP as of PHP version 5.3.0.


A od kiedy mamy php 5.3 ?
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.