2012-08-12 43 views
0

我正在編寫一個腳本來計算一組數據的模式,中位數和平均值。我有10個記錄存儲在MySQL數據庫和PHP數組中。當腳本完成時,腳本將只使用存儲在數據庫中的數據而不是PHP數組,PHP數組用於測試代碼。當使用MySQL查詢數組時,獲得不同的結果,與PHP數組相比

但是我發現,雖然使用PHP數組的結果與MySQL數組相比有所不同。在PHP數組,我有以下數據:

$arr = array(60, 70, 71, 76, 144, 151, 197, 229, 233, 233); 

在我的MySQL數據庫,我有這樣的代碼:

$data = mysql_query("SELECT amount FROM example") or die(mysql_error()); 
$arr = mysql_fetch_array($data); 

的數據是一樣的,例外是MySQL的數據包含.00每次記錄後。在試圖找出它給出錯誤結果的原因時,我從數據庫中的每條記錄中刪除了.00。數據仍然是錯誤的。

結果,使用PHP陣列時使我有以下的(正確的)的結果:付款

平均(均值)值£146.4
付款珍視 發生最多£233
的中值支付£151

結果,使用MySQL數組時給我下面的(錯誤)結果:

平均(平均值)支付的價值發生 最常£144
付款的中值£144
支付£值144

我在無法解釋爲什麼發生這種情況。下面是PHP代碼,我使用的是產生這些結果:

<?php 
     function arithmetic($array, $output = 'mean'){ 
      switch($output){ 
       // This case works out the mean 
       case 'mean': 
        $count = count($array); 
        $sum = array_sum($array); 
        $total = $sum/$count; 
       break; 
       // This case works out the median 
       case 'median': 
        rsort($array); 
        $middle = round(count($array)/2); 
        $total = $array[$middle-1]; 
       break; 
       // This case works out the mode 
       case 'mode': 
        $v = array_count_values($array); 
        arsort($v); 
        foreach($v as $k => $v){$total = $k; break;} 
       break; 
      } 
      return $total; 
     } 

     // PHP Array with data 
     //$arr = array(60, 70, 71, 76, 144, 151, 197, 229, 233, 233); 

     // MySQL Connection & Retrieval of data 
     $data = mysql_query("SELECT amount FROM example") or die(mysql_error()); 
     $arr = mysql_fetch_array($data); 

    ?> 

人有什麼想法?

UPDATE:
我一直在玩的MySQL查詢,並使用下面的代碼:

$data = mysql_query("SELECT * FROM example") or die(mysql_error()); 
$arr = mysql_fetch_assoc($data); 
print_r ($arr); 

顯示以下,唯一的結果是:

陣列([ID ] => 1 [amount] => 144)

所以真的,查詢是bri記錄所有記錄,而不僅僅是記錄。

+0

你確定你的數組php和數據庫中的值是一樣的嗎? – MimiEAM 2012-08-12 11:39:38

+0

100%肯定。我使用PHP數組中使用的值填充MySQL數據庫,因爲我首先創建了PHP數組。 – mickburkejnr 2012-08-12 11:40:28

+0

討厭成爲一個臭蟲,但中位數的計算方式不同: 如果數值的數量是偶數,就像這樣,你需要取兩個中間數的平均值(在本例中爲144和151),所以295/2 = 147.5 – 2012-08-12 12:18:40

回答

1

好了,原因是因爲你只取一排,因此一個數...

$arr = array(); 

while ($result_array = mysql_fetch_row($data)) { 
    $arr[] = $result_array[0]; 
} 

此代碼後,你應該能夠計算出正確的價值觀。

+0

你先生是個傳奇人物。我意識到我只有一個記錄,就像你發佈的那樣。謝謝你,謝謝你,謝謝你! – mickburkejnr 2012-08-12 12:36:35

0

我不知道是否有幫助,但你可能想挖的mysql-獲取數組(),並按照有建議在那裏,如果你是獲取數據的設置正確 http://php.net/manual/en/function.mysql-fetch-array.php

特別檢查。

function db_result_single($result) { 
    return ($row = mysql_fetch_row($result)) && isset($row[0]) ? $row[0] : false; 
} 
+0

我已經通讀並修改了它,但結果仍然相同。 – mickburkejnr 2012-08-12 12:13:47