2012-12-25 5 views
5

napisałem prosty skrypt z wielu warunków:multi-stan php

$item =12; 
    if($item < 5) 
    { 
    //display icon buyer 
    } 
    elseif ($item < 10) 
    { 
    //display icon buyer 
    } 
    elseif ($item < 15) 
    { 
    //display icon good buyer 
    } 
    elseif ($item < 20) 
    { 
    //display icon top buyer 
    } 
    // etc.... 

To długa wielo stan i wiem, jest bardzo zła.

Jak mogę zoptymalizować kod?

Uwaga.switch nie jest możliwe, ponieważ używam operatorów < i > itd

+3

kto ci powiedział, że nie możesz użyć '<>' z instrukcją przełącznika? – samayo

+1

Możesz zdecydowanie użyć 'switch', (' switch (true) ',' case ($ item <15) '). Powiedziałbym, że to chyba w porządku tak czy inaczej. – Brad

+1

Posunąłbym się nawet do stwierdzenia, że ​​wolałbym, aby instrukcje "przełączania" były wielokrotnością 'if-elses' w tygodniu. – PeeHaa

Odpowiedz

10

lepiej niż bukietem warunkowych jest patrzeć na wzór, który pozwala po prostu obliczyć.

W twoim przypadku wygląda to tak, że kroki są 5 - tak odpowiednie dla podziału.


lub zmapować go:

$item = 12; 

$icons = [ 
    10 => 'buyer', 
    15 => 'good buyer', 
    20 => 'top buyer', 
]; 

foreach ($icons as $value => $icon) { 
    if ($item < $value) { 
     return $icon; 
    } 
} 
return null; 

co umożliwia bardziej elastyczne kroki (jak masz to w twoich danych w pytaniu).

+2

interesujące podejście z foreach i jest łatwe do utrzymania w czystości. – Kate

9

dać to odchodzenie (demo):

<?php 
function icon($item) { 
    $icons = array(
     'buyer', 
     'buyer', 
     'good buyer', 
     'top buyer' 
    ); 
    $index = max(0, min(3, $item/5)); 
    return $icons[$index]; 
} 

$item = 12; 
echo icon($item) . "\n"; 

$item = 1; 
echo icon($item) . "\n"; 

$item = 100; 
echo icon($item) . "\n"; 

Wystarczy dodać do tablicy $icons więcej opcji/ikony.

+0

Wow, to bardzo dobre rozwiązanie, więc dziękuję i wesołych świąt dla wszystkich :-) – Kate

+1

Jako liczba całkowita są "floorly" w PHP, sprawdź funkcje 'min' i' max' dla niektórych miłych myszy: '$ index = max (0, min (count ($ icons), $ item/5)); return $ icons [$ index]; ' – hakre

+0

@Shaquin Trifonoff Brilliant. – samayo