Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Funkcja IF Jak skrócić...
michal_macieja
post
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 31.12.2009
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Witajcie, znów mam głupie pytanie...
Mam w funkcji takie coś:

  1. echo "<table>";
  2. echo "<tr><td><a href='show.php?site=$id_n'><img src='$zdje'width='240' height='180' title='$opis1'></a></td></tr>";
  3. echo "<tr><td><b><so1>$opis</so1></b> </td></tr>";
  4. echo "<tr><td><b><sc1>Run time:</b> $czas</sc1> </td></tr>";
  5. echo "</table>";
  6.  
  7. if($ile==4 or $ile==8 or $ile==12 or $ile==16 or $ile==20 or $ile==24 or $ile==28 or $ile==32 or $ile==36 or $ile==40
  8. or $ile==44 or $ile==48 or $ile==52 or $ile==56 or $ile==60 or $ile==64 or $ile==68 or $ile==72 or $ile==76 or $ile==80
  9. or $ile==84 or $ile==88 or $ile==92 or $ile==96)
  10. {echo"</td></tr><tr><td>";} else {echo "</td><td>";}
  11. $ile++;


A teraz pytanie
Jak mogę to skrócić, albo jak napisać inną funkcję by była odpowiedzialna za pisanie tych warunków w (if). Bo nie mogę ich ustalić raz, bo są one zmienne(w zależności ile wyników wybierze ktoś tyle się będzie wyświetlać), czy jest możliwość by to zrobić jak tak czy ktoś może podpowiedzieć mi.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




To popatrz jak się zmieniają liczby na litość boską (IMG:style_emoticons/default/winksmiley.jpg)
mov/1/X od 0 do 4999
mov/2/x od 5000 do 9999
Tak wyłapujesz katalog nadrzędny.
Podrzędne masz analogicznie, tyle że na zakresach 10 razy mniejszych... no i mają start nie od 1 ale od 0
mov/1/0 od 0 do 499
mov/1/1 od 500 do 999
Tak więc robisz dzielenie liczb przez 5000 zaokrąglasz w dół i dodajesz 1. A potem resztę z tego działania dzielisz przez 500 i zaokrąglasz tylko w dół.

Przykład? Liczba 7645:
7645/5000 = 1,529 = 1+1 = 2
2645/500 = 5,29 = 5
Sprawdzamy Twoje IFy ma wyjść mov/2/5/
A co mi wyszło? 2 oraz 5.

Sprawdźmy dla granicznych dla pewności...
4999/5000 = 0,9998 = 0+1 = 1
4999/500 = 9,998 = 9
1/9 -> Prawidłowe!

5000/5000 = 1+1 = 2
0/500 = 0
2/0 -> Prawidłowe!

Jak widzisz... Ten skrypt jest mocno do przodu bo już potrafi operować na 9/9, co u Cienie skończy się przy $nr1 = 49999, a Ty dopiero masz 6/3 skryptem przewidziane (IMG:style_emoticons/default/winksmiley.jpg)

Poucz się więcej matmy a nie siedź tylko przed kompem (IMG:style_emoticons/default/biggrin.gif)

EDIT: Popatrz zresztą na wyniki dzieleń... Są 10 razy mniejsze! To znów ułatwienie bo nie musisz wcale liczyć reszty z dzielenia przez 5000, mogąc to zastąpić odejmowaniem. Bierzesz liczbę i dzielisz ja przez 5000. Do całości dodajesz 1, a ułamek mnożysz razy 10 i zaokrąglasz w dół.

Owe 7645 przerobię raz jeszcze:
7645/5000 = 1,529 = 1+1=2
0,529*10 = 5,29 = 5
Nie banalniejsze?
  1. $liczba = $nr1/5000;
  2. $kat1 = floor( $liczba );
  3. $kat2 = floor( ($liczba - $kat1)*10 );
  4. //można też zamiast ($liczba - $kat1) dać fmod($liczba, 5000) czy $liczba%5000, ale odejmowanie powinno być szybsze niż modulo.
  5. $fo = 'mov/'.($kat1+1).'/'.$kat2.'/';

Co jest krótsze i wydajniejsze? (IMG:style_emoticons/default/winksmiley.jpg) 3 linijki czy 100 operacji if else (IMG:style_emoticons/default/winksmiley.jpg)

Ten post edytował thek 17.01.2010, 00:09:49
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 11.10.2025 - 22:58