![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 392 Pomógł: 7 Dołączył: 11.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Na wielu stronach www można znaleźć liczniki osób. Jednak z reguły treść jest taka: "licznik osób" lub odwiedziło nas osób:"
Ja natomiast chciałbym stworzyć licznik bardziej inteligentniejszym i w zależności od tego jaka ilość osób będzie w zmiennej dopasuje on odpowiednie sformuowanie i wyświetli je. Problemu by nie było gdybym wiedział jak to ukrócić. Przecież nie mogę pisać warunku dla każdej liczby. Chodzi o to żeby skrypt brał pod uwagę dwie ostatnie cyfry z całego ciągu znaków. Np.: Jak mam 113863 osoby (to tylko 63). Oczywiście jeśli ciąg jest większy od dwucyfrowej liczby. No i jeszcze jakiś wyjątek dla liczby 1, ponieważ nie może być 1 osób tylko 1 osoba, ale już 11 osób, ...,111 osób, itd. Podobnie dla 2 będzie osoby, dla 12 osób, dla 22 osoby, 32 osoby, ..., 102 osoby, itd Dla pozostałych cyfr według powyższych reguł. To trzeba wziąć pod uwagę! Oczywiście takie rozwiązanie można by zastosować nie tylko w licznikach. Na razie kod wygląda tak:
Mam nadzieję, że to dobra pętla do tego zadania. Może da się to jakoś uprościć żeby nie wpisywać tylu warunków. Jestem też otwarty na inne rozwiązania jeżeli moje okaże się błędne!!! Ten post edytował Szunaj85 9.09.2008, 21:23:04 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 142 Pomógł: 35 Dołączył: 5.12.2006 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Problemu by nie było gdybym wiedział jak to ukrócić. Przecież nie mogę pisać warunku dla każdej liczby. Ogólnie do programowania przydaje się czasami znajomość matematyki a przynajmniej jej bazowych operacji takich jak: dodawani, odejmowanie, mnożenie, dzielenie no i modulo (reszta z dzielenia). Ta ostatnia znakomicie się przydaje jeżeli chcesz wiedzieć dwie ostatnie cyfry z liczby. Chodzi o to żeby skrypt brał pod uwagę dwie ostatnie cyfry z całego ciągu znaków. Np.: Jak mam 113863 osoby (to tylko 63). Oczywiście jeśli ciąg jest większy od dwucyfrowej liczby.
Ale zastanawiam się czy nie wystarczy ci znajomość ostatniej cyfry. Za wyjątkiem wspomnianej 12 to chyba nie wiele się różnią No i jeszcze jakiś wyjątek dla liczby 1, ponieważ nie może być 1 osób tylko 1 osoba, ale już 11 osób, ...,111 osób, itd. Jeżeli chodzi o dwunastkę to faktycznie sprawdzasz czy odcięte dwie cyfry stanowią dwunastkę. Natomiast co do dwójki to ponownie operacja modulo i warunek Podobnie dla 2 będzie osoby, dla 12 osób, dla 22 osoby, 32 osoby, ..., 102 osoby, itd
Czyli ja bym zaproponował coś takiego:
ale nie testowałem więc nie wiem czy to jest poprawne. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 012 Pomógł: 109 Dołączył: 26.09.2003 Skąd: nexis.pl Ostrzeżenie: (0%) ![]() ![]() |
Ten post edytował nexis 9.09.2008, 22:00:19 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 392 Pomógł: 7 Dołączył: 11.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Barthpl - rozumiem, że w twoim kodzie zmienną określającą liczbę osób jest $liczba, ale ten kod coś nie działa.
Nexis - rozumiem, że w twoim kodzie zmienną określającą liczbę osób jest $ile, ale za każdym razem czy 1 czy 20 wyświetla słowo "osób". (IMG:http://forum.php.pl/style_emoticons/default/dry.gif) Ja mam coś takiego: Więc daje porównanie np.:
Na razie bardziej mi się podoba kod Nexis ponieważ jakoś działa, tylko można powiedzieć, że jest praktycznie bezużyteczny skoro chyba zawsze wyświetla słowo osób. Ten sam efekt mogę przecież uzyskać poprzez np. echo (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 142 Pomógł: 35 Dołączył: 5.12.2006 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
funkcja zdefiniowana jest tak (prawiłem ją nieco):
Kod function odmiana( $counter ) { if( $counter == 1 ) return 'osoba'; else { $sufix = $counter % 100; if( $sufix > 11 && $sufix < 15 ) return 'osób'; else { $liczba = $sufix % 10; switch( $liczba ) { case 0: case 1: case 5: case 6: case 7: case 8: case 9: return 'osób'; case 2: case 3: case 4: default: return 'osoby'; } } } } i przykład użycia (co by nie było wątpliwości co i jak):
co daję następujący wynik: 13 osób 1 osoba 101 osób 123 osoby 112 osób 197 osób @moderatorzy: jak się wkleja kod switch'a w PHP to dziwnie ucina... |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 392 Pomógł: 7 Dołączył: 11.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Jednak wątpliwości są. Zrobiłem tak:
Tylko teraz nie wiem jak to prawidłowo wywołać, wyświetlić poprzez echo. (IMG:http://forum.php.pl/style_emoticons/default/sadsmiley02.gif) moderatorzy też wczoraj miałem problem z wklejeniem pętli switch. Wszystkie echa mi zjadało. Ogólnie to cały kod świruje Ten post edytował Szunaj85 10.09.2008, 18:48:17 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 142 Pomógł: 35 Dołączył: 5.12.2006 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli w zmiennej $suma masz zliczoną liczbę odwiedzin to zaproponowanej funkcji użyj tak:
Oczywiście funkcja musi być gdzieś wcześniej zadeklarowana. Prościej się chyba tego nie da wytłumaczyć. Polecam raz jeszcze przejrzeć kurs dla początkujących, szczególnie część mówiącą w jaki sposób definiować funkcje. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 392 Pomógł: 7 Dołączył: 11.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Mam jeszcze takie pytanie. Skrypt Barthpl wyświetla (ilość osób) oraz (odpowiednią odmianę słowa osób).
1. Ja natomiast chciałbym wpisać do tego skryptu jeszcze tekst przed (ilość osób) oraz (odpowiednią odmianę słowa osób), który w zależności od ilości osób był by wyświetlany podobnie jak te odmiany osoba, osób, osoby. Wiem jak odmieniać, ale nie wiem jak ten tekst wstawić w skrypt żeby wyszło np. Głosowało 5 osób, Głosowały 23 osoby, itp 2. Jak napisać regółę wiem, ale nie wiem co zrobić żeby w momencie kiedy nikt nie zagłosował nie wyświetlało się "0" tylko sam komunikat, np. Jeszcze nikt nie głosował.
Mam pewien pomysł żeby przepisać kod jeszcze raz i wstawić tam inne sformuowania, ale czy nie da się krócej? Ten post edytował Szunaj85 5.10.2008, 14:32:21 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 142 Pomógł: 35 Dołączył: 5.12.2006 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
może przerobić funkcję w bardo porosty sposób (wydaje mi się że słowa odmieniają się w taki sam sposób, ale nie jestem pewien)
...wydaje się że jest poprawnie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.09.2025 - 19:26 |