2015-10-21 63 views
1

我在問這個問題要知道,是否有其他最好的方式來寫這個邏輯在最少的幾行?如何以最實用的方式編寫這種邏輯?

這是我的代碼有很多ifelseif條件:

if ($emission <= 100) { 
    $cssClass = "emission_a"; 
} elseif ($emission > 101 && $emission <= 120){ 
    $cssClass = "emission_b"; 
} elseif ($emission >= 121 && $emission <= 150){ 
    $cssClass = "emission_c"; 
} elseif ($emission >= 151 && $emission <= 165){ 
    $cssClass = "emission_d"; 
} elseif ($emission >= 166 && $emission <= 185){ 
    $cssClass = "emission_e"; 
} elseif ($emission >= 186 && $emission <= 125){ 
    $cssClass = "emission_f"; 
} elseif ($emission >= 226){ 
    $cssClass = "emission_g"; 
} 

希望有人可以幫助我。 謝謝。

+0

試試吧關鍵字:關聯數組 – Rizier123

+0

@ Rizier123。你意思是?你能詳細說明嗎?謝謝。 – user3733831

+1

您可以在&&之前刪除所有條件(即'$ emit> 101 &&'),因爲每次到達下一個檢查時,都已經確定該值高於前一個。所以你只需要做'if($ emission <= 100){$ cssClass =「emission_a」; } elseif($ emission <= 120){...'如果這是有道理的。 – mic

回答

4

您能抽出一些字符,如果你簡化了條件,但您將需要相同數量的if/elseif的語句

<?php 

if ($emission <= 100) { 
    $cssClass = "emission_a"; 
} elseif ($emission <= 120) { 
    $cssClass = "emission_b"; 
} elseif ($emission <= 150) { 
    $cssClass = "emission_c"; 
} elseif ($emission <= 165) { 
    $cssClass = "emission_d"; 
} elseif ($emission <= 185) { 
    $cssClass = "emission_e"; 
} else { 
    $cssClass = "emission_g"; 
} 

// this one makes no sense, maybe a typo? 
// } elseif ($emission >= 186 && $emission <= 125){ 

或者你有一個映射數組這樣

<?php 
$mapping = array(
    100 => 'emission_a', 
    120 => 'emission_b', 
    150 => 'emission_c', 
    165 => 'emission_d', 
    185 => 'emission_e', 
    225 => 'emission_f' 
); 

$cssClass = 'emission_g'; // default class if $emission is > 225 

foreach ($mapping as $limit => $class) { 
    if ($emission <= $limit) { 
     $cssClass = $class; 
     break; 
    } 
} 
+1

有效地相同的答案@mic在評論中給出的相同的答案。 – klaar

+1

它不一樣,我發現了一個可能的錯字,並用另一個替換了elseif ...並讓你冷靜下來,我添加了其他可能的解決方案。用戶必須發佈答案作爲答案......我無法評論我的低聲譽。 –

+0

這是真的,併爲您的替代解決方案kuddos;挺優雅的。從我+1。 – klaar

相關問題