Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: 1 głos ale 2 głosy i 7 głosów - liczenie zgodne z gramatyką
Forum PHP.pl > Forum > PHP
saper
Pewnego wieczora stwierdzilem ze przydalaby się na mojej stronie ankieta, wiec ja napisalem. Pomyslalem ze przedstawie wyniki w formie slownej by bylo oryginalniej aaevil.gif . No i tu wyszedl na wieszch pewien ciekawy problem. Jak sprawić by slowa dobierane do liczby glosow byly poprawnie odmienione? Na szczescie mamy tutaj zachowana pewna prawidlowosc ktora powtarza sie zawsze. Mianowicie wszystkie liczby konczace sie cyfra 1, 5, 6, 7, 8, 9 i 0 maja odmiane ...głosów (np. 21 głosów), wszystkie liczby konczace sie cyfra 2, 3 i 4 maja odmniane ...głosy (np. 34 głosy). Jedynym wyjatkiem od tej reguly w naszej ankiecie bylaby cyfra 1 ktora ma odmiane ...głos (1 głos).
Teraz moje pytanie: "Jaki skrypt napisać (przy uzyciu jakich funkcji) by rozpoznawal ostatnia cyfre w liczbie? Macie jakies pomysly?".
majkel
Skrypcik...


[php:1:bc0700374d]

<?
//na początek wrzuć jakąś liczbę


if(substr($liczba,-2)==1) // tu jest substr($liczba,-2), bo może być 1 lub 11
{ echo("głos"); }


elseif(substr($liczba,-1)==2 || substr($liczba,-1)==3 || substr($liczba,-1)==4)

{ echo("głosy"); }


elseif((substr($liczba,-2)>5 && substr($liczba,-2)<21) || substr($liczba,-1)==1 || substr($liczba,-1)==5 ||

substr($liczba,-1)==6 || substr($liczba,-1)==7 || substr($liczba,-1)==8 || substr($liczba,-1)==9) //od liczby 5 do 21 jest

"głosów", a reszta już normalnie

{ echo("głosów"); }

?>[/php:1:bc0700374d]


Nie mam pewności czy działa, bo nie mam w tej chwili gdzie sprawdzić. Jak działa, to daj znać. Jak nie działa... to też daj znać i powiedz co nie działa.
majkel
P.S. 18 linia to komentarz
zombie
uaktualniony:

[php:1:56856b8aaf]<?php
$string = "454316";
if (strlen($string) == 1){$last = $string[(strlen($string)-1)];}
else {$last = substr($string, -2);}
?>[/php:1:56856b8aaf]
majkel
Można wpisać liczbę ujemną, wtedy zostawi ostatnią i wyrzuci resztę. Poza tym twój kod wyrzuci ostatnią a zostawi resztę... chyba... bo jak mówię nie mam gdzie sprawdzić... :?
Nitro
Można i tak:
[php:1:bb071fe565]<?php
function koncowka($amount) {
if ($amount%10==0 || ($amount%100>10 && $amount%100<20)) { $buf="głosów"; }
else if ($amount%10>1 && $amount%10<5) { $buf="głosy"; }
else if ($amount==1) { $buf="głos"; }
else { $buf="głosów"; }
return $buf;
}
?>[/php:1:bb071fe565]
saper
Dziekuje za pomoc! Sposob Nitra dziala bez zarzutu. Co do sposobu majkela to nie sprawdzalem - Nitro wyrazil to nieco zwiezlej - ale dziekuje za checi 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.