2012-12-25 2 views
5

Ich schrieb ein einfaches Skript mit vielen Bedingungen:Multi-Condition 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.... 

Es ist ein langer multi Zustand und ich weiß, sehr schlecht ist.

Wie könnte ich den Code optimieren?

Hinweis.switch ist nicht möglich, weil ich die Operatoren < und > bin mit etc.

+3

Wer hat Ihnen gesagt, dass Sie '<>' nicht mit der switch-Anweisung verwenden können? – samayo

+1

Sie können definitiv 'switch', (' switch (true) ',' case ($ item <15) ') verwenden. Ich würde sagen, es ist in jeder Hinsicht gut. – Brad

+1

Ich würde gehen so weit zu sagen, dass ich eine 'switch' Aussagen über mehrere' if-elses' anyday der Woche bevorzugen würde. – PeeHaa

Antwort

10

Besser als ein Bündel von conditionals ist nach einem Muster zu suchen, die es einfach zu berechnen erlaubt.

In Ihrem Fall sieht es so aus, dass Schritte um 5 sind - so geeignet für die Teilung.


Oder Karte zeigen:

$item = 12; 

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

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

Welche flexibleren Schritte erlaubt (wie Sie es in Ihren Daten in Frage).

+2

interessant Annäherung mit foreach und es ist einfach für zukünftige Wartung. – Kate

9

Geben Sie diese ein zu gehen (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"; 

Einfach auf die für mehr Optionen/icons $icons Array hinzuzufügen.

+0

Wow, es ist eine sehr gute Lösung, also vielen Dank und frohe Weihnachten für alle :-) – Kate

+1

Als Integer sind "floorly" in PHP, check die 'min' und' max' Funktionen für einige nette Mäuse: '$ index = max (0, min (Anzahl ($ Symbole), $ Element/5)); zurückgeben $ icons [$ index]; ' – hakre

+0

@Shaquin Trifonoff Brilliant. – samayo