Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Odejmowanie lub dodawanie w określonym przedziale
Forum PHP.pl > Forum > Przedszkole
tomek85
Witam! Czy można ustawic przedział zmiennej w jakiej może się odejmowac i dodawac.

Rozwazmy to na przykladzie.

Mój przedział to od 1 do 7
Mam zmienna $liczba = 7 i zmienna $liczba_d = $liczba + 1 i chciałbym aby wynikiem tej zmiennej było 1 a nie 8 - tak aby uzywala tego przedzialu co podalem 1-7 jak zrobic cos takiego ?
Pozdrawiam!
askone
Hej

  1. $max = 8;
  2. $min = 1;
  3.  
  4. $liczba = ($liczba + 1 > $max)? $min : $liczba + 1;


Powinno rozwiązać Twój problem winksmiley.jpg
nexis
Pewnie nie potrafisz rozwiązać tego problemu, a na pewno nie potrafisz go opisać. Jeśli chodzi o liczby losowe, to poczytaj o rand().
tomek85
Cytat(fly474 @ 25.09.2009, 08:03:47 ) *
Hej

  1. $max = 8;
  2. $min = 1;
  3.  
  4. $liczba = ($liczba + 1 > $max)? $min : $liczba + 1;


Powinno rozwiązać Twój problem winksmiley.jpg


No tak działa z tym, że nie rozumiem kilku rzeczy i przez to nie potrafię przebudować tej funkcji.
Mianowicie gdybyś był tak miły i powiedział mi co oznacza ":" jak również "?" było by bardzo miło bo tego nie rozumiem i nie mogę jej przebudować, aby teraz odejmować bo jej nie rozumiem.

Z góry dzięki i liczę na odpowiedź!
phpion
Cytat(tomek85 @ 25.09.2009, 08:33:19 ) *
Mianowicie gdybyś był tak miły i powiedział mi co oznacza ":" jak również "?"

Jest to skrócony zapis warunku:
  1. if ($liczba + 1 > $max) {
  2. $liczba = $min;
  3. }
  4. else {
  5. $liczba = $liczba + 1;
  6. }
askone
Hej

Jest dokładnie tak jak napisał PHPION - skrócona wersja smile.gif

Ale zrobiłem to z premedytacją, bo nie jadłem dziś jeszcze śniadania smile.gif

Pozdro
thek
Hmmm... a może chodzi Ci o wariację funkcji modulo? Bo pytanie pozostaje takie jak się ma zachowywać dla innych niż przykładowe 7? Dla 1-7 pokazuje samą siebie. Dla 8 pokazuje 1, a co ma pokazać dla 9 i 10 i dalszych? Na razie pokazuje $min, czyli cały czas 1, a czy nie powinno 2, 3 i tak dalej? Albo jeszcze ciekawszy wariant -> co z 0 i liczbami mniejszymi od niego? Może na zasadzie licznika, który się może "przekręcać". W takiej sytuacji musiałbyś zmodyfikować już istniejące sprawdzenie. Dla liczb większych od 7 ja bym wrzucił modulo biorące pod uwagę "przesunięcie" o 1, czyli ($liczba%7)+1, oczywiście tylko dla liczba większych lub równych 7, dla mniejszych przesunięcie o 1 spowoduje błąd, gdyż dodawać będzie owo 1.

EDIT: bym zapomniał dodać... funkcja fmod(a, b) i zapis a%b to jedno i to samo.

Edit2: a tu masz porównanie wyglądu if-a
if (warunek) {instrukcje1} else {instrukcje2}
(warunek) ? {instrukcje1} : {instrukcje2}

Jak widzisz to tylko inna forma ;)

Edit3: Możesz problem rozwiązać jeszcze inaczej z liczeniem...
  1. $liczba_d = $liczba+1;
  2. while( $liczba_d > $max )
  3. $liczba_d -=7;
To Ci wszystkie liczby od 0 wzwyż liczy bez stosowania if-ów, a gdy napotka liczbę większą od zakresu to odejmuje 7 tak długo, aż zmieści się w przedziale. Stąd jest dobre tylko dla małych. Dla dużych użyłbym fmod bo szybsze. Ale zawsze to jakiś sposób ;) I dlatego lubię informatykę. Jeden problem rozwiązań wiele.
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.