2016-04-16 169 views
0

我有如下PHP代码:PHP的太多,如果else语句

if($ptp_car_1 == "ptp_Denpasar_Ubud_fee_".$way."_car_1"){ 
     $ptp_car_1 = "ptp_Ubud_Denpasar_fee_".$way."_car_1"; 
    } 
    if($ptp_car_1 == "ptp_Denpasar_Tanah_Lot_fee_".$way."_car_1"){ 
     $ptp_car_1 = "ptp_Tanah_Lot_Denpasar_fee_".$way."_car_1"; 
    } 
    if($ptp_car_1 == "ptp_Denpasar_Sanur_fee_".$way."_car_1"){ 
     $ptp_car_1 = "ptp_Sanur_Denpasar_fee_".$way."_car_1"; 
    } 
    if($ptp_car_1 == "ptp_Denpasar_Seminyak_fee_".$way."_car_1"){ 
     $ptp_car_1 = "ptp_Seminyak_Denpasar_fee_".$way."_car_1"; 
    } 
    if($ptp_car_1 == "ptp_Denpasar_Kuta_fee_".$way."_car_1"){ 
     $ptp_car_1 = "ptp_Kuta_Denpasar_fee_".$way."_car_1"; 
    } 
    if($ptp_car_1 == "ptp_Denpasar_Jimbaran_fee_".$way."_car_1"){ 
     $ptp_car_1 = "ptp_Jimbaran_Denpasar_fee_".$way."_car_1"; 
    } 
    if($ptp_car_1 == "ptp_Denpasar_Nusa_Dua_fee_".$way."_car_1"){ 
     $ptp_car_1 = "ptp_Nusa_Dua_Denpasar_fee_".$way."_car_1"; 
    } 
// many code over 1,000 

我怎样才能优化呢? 我希望页面运行得更快,但现在太慢了。

+0

尝试一个switch语句(http://php.net/manual/en/control-structures.switch.php) – gavgrif

+1

你应该做的是,CDS的两个功能部分字符串发生变化,然后您不需要任何if/else – Rasclatt

回答

0

在这种情况下,SWITCH CASE应该会更好。

通过这个...

Why the switch statement and not if-else?

Is "else if" faster than "switch() case"?

试用一下这个,

switch ($ptp_car_1){ 
     case "ptp_Denpasar_Ubud_fee_".$way."_car_1": 
     { 
      $ptp_car_1 = "ptp_Ubud_Denpasar_fee_".$way."_car_1"; 
     } 
     break; 
     case "ptp_Denpasar_Tanah_Lot_fee_".$way."_car_1": 
     { 
      $ptp_car_1 = "ptp_Tanah_Lot_Denpasar_fee_".$way."_car_1"; 
     } 
     break; 
     case "ptp_Denpasar_Sanur_fee_".$way."_car_1": 
     { 
      $ptp_car_1 = "ptp_Sanur_Denpasar_fee_".$way."_car_1"; 
     } 
     break; 
     case "ptp_Denpasar_Seminyak_fee_".$way."_car_1": 
     { 
      $ptp_car_1 = "ptp_Seminyak_Denpasar_fee_".$way."_car_1"; 
     } 
     break; 
     case "ptp_Denpasar_Kuta_fee_".$way."_car_1": 
     { 
      $ptp_car_1 = "ptp_Kuta_Denpasar_fee_".$way."_car_1"; 
     } 
     break; 
     case "ptp_Denpasar_Jimbaran_fee_".$way."_car_1": 
     { 
      $ptp_car_1 = "ptp_Jimbaran_Denpasar_fee_".$way."_car_1"; 
     } 
     break; 
     case "ptp_Denpasar_Nusa_Dua_fee_".$way."_car_1": 
     { 
      $ptp_car_1 = "ptp_Nusa_Dua_Denpasar_fee_".$way."_car_1"; 
     } 
     break; 

     /* 
     //OPTIONAL 

     default: 
      $ptp_car_1 = $ptp_car_1; 

     */ 


    } 
0

使用否则,如果象下面这样:

if($ptp_car_1 == "ptp_Denpasar_Ubud_fee_".$way."_car_1"){ 
    $ptp_car_1 = "ptp_Ubud_Denpasar_fee_".$way."_car_1"; 
} 
elseif($ptp_car_1 == "ptp_Denpasar_Tanah_Lot_fee_".$way."_car_1"){ 
    $ptp_car_1 = "ptp_Tanah_Lot_Denpasar_fee_".$way."_car_1"; 
} 
elseif($ptp_car_1 == "ptp_Denpasar_Sanur_fee_".$way."_car_1"){ 
    $ptp_car_1 = "ptp_Sanur_Denpasar_fee_".$way."_car_1"; 
} 
elseif($ptp_car_1 == "ptp_Denpasar_Seminyak_fee_".$way."_car_1"){ 
    $ptp_car_1 = "ptp_Seminyak_Denpasar_fee_".$way."_car_1"; 
} 
elseif($ptp_car_1 == "ptp_Denpasar_Kuta_fee_".$way."_car_1"){ 
    $ptp_car_1 = "ptp_Kuta_Denpasar_fee_".$way."_car_1"; 
} 
elseif($ptp_car_1 == "ptp_Denpasar_Jimbaran_fee_".$way."_car_1"){ 
    $ptp_car_1 = "ptp_Jimbaran_Denpasar_fee_".$way."_car_1"; 
} 
elseif($ptp_car_1 == "ptp_Denpasar_Nusa_Dua_fee_".$way."_car_1"){ 
    $ptp_car_1 = "ptp_Nusa_Dua_Denpasar_fee_".$way."_car_1"; 
} 

它会更快。

+2

*将其更改为'echo“完成”;'更快!*只是更改代码的意图以使其更快无用 – Rizier123

0

我还没有看到所有的1000 if语句,但是如果彭定康持有,您可以使用替换文字的功能。如前:

function convertDenpansarFeeString($ptp_car, $way) 
{ 
    // number of characters in ptp_Denpasar_ = 13 
    // number of characters in _car_ = 5 
    return "ptp_" 
     . substr($ptp_car 
      , 13 
      , strpos($ptp_car, "_fee_") - 13 
     ) 
     . "_Denpasar_fee_" 
     . $way 
     . "_car_" 
     . substr($ptp_car 
      , strpos($ptp_car, "_car_") + 5 
     ); 
} 

并使用像这样:

$ptp_car1 = convertDenpansarFeeString($ptp_car1, $way); 
$ptp_car2 = convertDenpansarFeeString($ptp_car2, $way); 
0

有关使用数组如何?

function getResult($key){ 
    $way = 'hello'; 
    $array = [ 
     'ptp_Denpasar_Ubud_fee_'.$way.'_car_1' => "ptp_Ubud_Denpasar_fee_".$way."_car_1", 
     "ptp_Denpasar_Tanah_Lot_fee_".$way."_car_1" => "ptp_Sanur_Denpasar_fee_".$way."_car_1", 
    ]; 
    return $array[$key]; 
} 

echo getResult('ptp_Denpasar_Ubud_fee_hello_car_1'); 
3

只要其他1000多个字符串遵循相同的模式,此函数将直接转换字符串。

// reorder parts if the following pattern is true for all entries 
// 
// starts with "ptp" (store as group 1) 
// then contains an '_' 
// then has at least 1 char that is not an '_' (store as group 2) 
// then contains an '_' 
// then contains at least 1 char that is not '_fee_' (store as group 3) 
// then contains an '_' 
// then contains any number of chars (store as group 4) 
// 
// group 4 will contain 'fee_', $way and '_car_1' but we really don't need to care what 
// those chars are, they just get tacked on to the end. 
// 
// Once the original is broken up, parts 2 & 3 are swapped and the 
// results are imploded into the desired string with '_' separators. 
// 
function swapPtpParts($ptp_car_1) { 
    $matches = []; 
    if(preg_match("/(ptp)_([^_]+)_(.+?(?=_fee_))_(.*)/", $ptp_car_1, $matches)) { 
     $parts = [ 
      $matches[1], 
      $matches[3], 
      $matches[2], 
      $matches[4], 
     ]; 
     return implode('_', $parts); 
    } 
    return $ptp_car_1;  
} 

用法:

$ptp_car_1 = swapPtpParts($ptp_car_1);