2017-06-06 34 views
0

我試圖構建一個函數來評估兩個數字,並查看是否有發生百分比變化。用於評估百分比變化的PHP函數

// $live_data = data pulled from an API - ex: .000121231 or 2500.00 
// $pervious_data = data pulled from a DB - ex: .00or 11111.00 
// $alert_data['value'] = data pulled from a DB - ex: 10 or -10 

function percent_change_eval($data, $alert_data, $previous, $currency){ 
    $live_data = (float)$data[$currency][$alert_data['comparison']]; 
    $previous_data = (float)$previous[$alert_data['comparison']]; 
    $percent = round((($live_data) - ($previous_data))/($previous_data) * 100, 10); 
    switch($alert_data['operator']) {  
    case ">=": 
     if($percent > $alert_data['value']){ 
      return TRUE; 
     } else { 
      return FALSE; 
     } 
     break 1; 
    case "<=": 
     if($percent < $alert_data['value']){ 
      return TRUE; 
     } else { 
      return FALSE; 
     } 
     break 1; 
    } 
} 

我已經建立了功能,但由於某種原因,不斷拋出true當它不應該。我假設它與數字太大或太小或者其中一個變量是空值有關。

任何建議或幫助?

+0

什麼是'$ alert_data [「經營者」]'第一次和第二值:
我只用兩行重寫時間?此外,嘗試在開關盒中使用字符串而不是操作符('<=', '> =')。 – Naga

+0

我的建議是在switch語句之前記錄$ percent,$ alert_data ['operator']和$ alert_data ['value']的值。只是爲了確保TRUE不是由輸入數據引起的。 –

回答

0

本身不是答案,但我討厭switch個案。它花了16行代碼!

if($alert_data['operator'] == '>=') return $percent > $alert_data['value']); 
if($alert_data['operator'] == '<=') return $percent < $alert_data['value']); 

看起來更乾淨,更地方犯了一個錯誤