代码之家  ›  专栏  ›  技术社区  ›  Bryce

PHP切换条件语句更好的方法

  •  0
  • Bryce  · 技术社区  · 7 年前

    优化此代码的最佳方法是什么?我知道if和else语句会更快,但我想要简洁明了的语句。有什么想法吗?

    switch ($data['months']) {
    case ($data['months'] >= 400):
        $data['months'] = 400;
        break;
    case ($data['months'] >= 360):
        $data['months'] = 360;
        break;
    case ($data['months'] >= 60):
        $data['months'] = 60;
        break;
    case ($data['months'] >= 48):
        $data['months'] = 48;
        break;
    case ($data['months'] >= 36):
        $data['months'] = 36;
        break;
    case ($data['months'] >= 24):
        $data['months'] = 24;
        break;
    case ($data['months'] >= 12):
        $data['months'] = 12;
        break;
    case ($data['months'] >= 9):
        $data['months'] = 9;
        break;
    case ($data['months'] >= 6):
        $data['months'] = 6;
        break;
    case ($data['months'] >= 3):
        $data['months'] = 3;
        break;
    case ($data['months'] >= 1):
        $data['months'] = 1;
        break;
    default:
        $data['months'] = 12;
    }
    
    3 回复  |  直到 7 年前
        1
  •  5
  •   Chin Leung    7 年前

    我想你可以用 foreach 具有一系列断点。

    $breakpoints = array(400, 360, 60, 48, 36, 24, 12, 9, 6, 3, 1);
    
    // Loop through each breakpoints
    foreach($breakpoints as $breakpoint){
    
        // Proceed to next breakpoint
        if($data['months'] < $breakpoint)
            continue;
    
        // No need to loop through the rest of the array
        $data['months'] = $breakpoint;
        break;
    
    }
    
    // Handle the cases where $data['month'] is less than 1
    if($data['months'] < 1)
        $data['months'] = 12;
    

    使现代化

    $data['months'] 在循环之前小于1:

    if($data['months'] < 1)
        $data['months'] = 12;
    else{
    
        $breakpoints = array(400, 360, 60, 48, 36, 24, 12, 9, 6, 3, 1);
    
        // Loop through each breakpoints
        foreach($breakpoints as $breakpoint){
    
            // Proceed to next breakpoint
            if($data['months'] < $breakpoint)
                continue;
    
            // No need to loop through the rest of the array
            $data['months'] = $breakpoint;
            break;
    
        }
    
    }
    
        2
  •  5
  •   ceejayoz    7 年前

    $breakpoints = [1, 3, 6, 9, 12, 24, 36, 48, 60, 360, 400];
    
    foreach($breakpoints as $breakpoint) {
        if($data['months'] >= $breakpoint) {
            $value = $breakpoint;
        }
    }
    
    if(!isset($value)) { $value = 12; }
    
        3
  •  0
  •   Bryce    7 年前

    以下是我最后得到的结果。

    $breakpoints = [400, 360, 240, 120, 60, 48, 36, 24, 12, 9, 6, 3, 1, null];
    foreach($breakpoints as $breakpoint){
        if($data['months'] >= $breakpoint) {
            $data['months'] = $breakpoint ? $breakpoint : 12;
            break;
        }
    }