[MEGOLDVA] If, elseif gond

Sziasztok!

Van egy oldalam, ami következőképp működik:
ha vásárol valaki egy terméket, akkor a $sales változóba számlálódik.

Ehhez szeretnék egy kis "ariságot" összedobni:
A kód így néz ki jelenleg, de nem jó:
if ($sales >= 10) {
kép beszúrás...
} else if ($sales >=100) {
kép beszúrás...
kép beszúrás... (ugyanaz)
} elseif ($sales >=1000) {
kép beszúrás...
kép beszúrás...
kép beszúrás...
kép beszúrás...
} else {
kép beszúrás...
}

Mielőtt tökhülyének néznétek egy virtuális ölelés-számlálóról van szó, amit kiegészítettem egy smileyval. Ezt szeretném ha többször kitenné attól függően, hogy hány számjegyű ölelés zajlott már le.
Vagy rossz a megközelítés?

Előre is köszi a segítséget.

Megoldás: Mivel végülis nem is maga a $sales értéke számít, hanem az, hogy hány számjegyből áll, így megoldottam egy strlen függvény-switch-case kombóval. :)

Hozzászólások

Jaj! Az első feltétel szinte mindig teljesül, így a többi vizsgálatra nem kerül sor. Aztán ha a sales < 10, akkor ugyan teljesül az else ág, de azokban lévő if-ek nem. Tehát a sorrend rossz. A nagyobb számok felől a kisebbek felé haladva jó lenne, vagy ez a sorrend, de a relációs jel fordítva.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

$i=intval(log10($sales));
switch ($i) {
case 0: valami;
break;
case 1: bármi;
break;
case 2: akármi;
break;
default: többi;
}

Aztán aszerint, hogy ez 0, 1, 2 vagy több, csinál valamit.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

És ha igazán csemegézni akarunk, akkor ebben az esetben a break; el is hagyható. :-)
switch ($i) {
case 2: egymosoly();
case 1: egymosoly();
case 0: egymosoly();
Ekkor ha $i értéke 2, akkor a case 2 ágon bemegy egy mosolyt rajzolni, majd break hiányában megrajzolja az 1 és utána a 0 után játó mosolyt is.

morning trolling on

A kérdésből annyi látszik, hogy a száraz futtatást azután sem próbáltad meg, miután szembesültél azzal, hogy a kód nem a kívánt eredményt hozza.
Ha nem szoksz rá, ennél bonyolultabb számítások/ciklusok/elágazások nemkívánatos kimenete átláthatatlan erdőbe fog vinni.

Amit csináltál, az végül is a változó 10-es alapú logaritmusának egészrésze, ahogyan magam is javasoltam. :) Pontosabban a tied 1-gyel nagyobb eredményt ad, de ez lényegtelen, hiszen azt írsz a case-be, amit akarsz.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE