2013-05-18 60 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