2013-05-18 61 views
0

我将此代码用于计算最大赢率&在数组值上失去连胜。但我可以在一个foreach循环中让我的头脑做这件事。目前我使用2个循环如下:最大输赢条码(代码优化)

public function calculateStreaks() 
    { 
    $max_win_streak = 0; 
    $_win_streak = 0; 
    $max_loss_streak = 0; 
    $_loss_streak = 0; 

    foreach($this->all_trades_pnl as $value){ 
     if($value >= 0) { 
     $_win_streak++; 
     if($_win_streak > $max_win_streak){ 
      $max_win_streak = $_win_streak; 
     } 
     } 
     else { 
     $_win_streak = 0; 
     } 
    } 
    foreach($this->all_trades_pnl as $value){ 
     if($value < 0) { 
     $_loss_streak++; 
     if($_loss_streak > $max_loss_streak) { 
      $max_loss_streak = $_loss_streak; 
     } 
     } 
     else { 
     $_loss_streak = 0; 
     } 
    } 
    return array('win_streak' => $max_win_streak, 'loss_streak' => $max_loss_streak); 

    } 

它的工作原理,但是从优化似乎远,任何想法的代码这更好的? 感谢很多提前, 问候, 约翰

回答

2

由于两个你的循环是平等的,我认为你可以一齐将它们混合,并一次给所有变量如下

public function calculateStreaks() 
{ 
    $max_win_streak = 0; 
    $_win_streak = 0; 
    $max_loss_streak = 0; 
    $_loss_streak = 0; 

    foreach($this->all_trades_pnl as $value){ 
     if($value >= 0) { 
     $_win_streak++; 
     if($_win_streak > $max_win_streak){ 
      $max_win_streak = $_win_streak; 
     } 
     $_loss_streak = 0; 
     } 
     else if($value < 0) { 
     $_loss_streak++; 
     if($_loss_streak > $max_loss_streak) { 
      $max_loss_streak = $_loss_streak; 
     } 
     $_win_streak = 0; 
     } 
    } 
    return array('win_streak' => $max_win_streak, 'loss_streak' => $max_loss_streak); 
} 
+0

明显! (感觉很蠢):D非常感谢。祝你有个愉快的周末 – JohnWolf

+0

@johnwolf欢迎你! – Fabio