データセットの最頻値、中央値、平均値を計算するスクリプトを書いています。MySQLデータベースとPHP配列に保存されている10個のレコードがあります。スクリプトが終了すると、スクリプトはデータベースに格納されているデータのみを使用し、PHP配列は使用しません。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);
?>
誰かアイデアはありますか?
更新:
MySQLクエリを再生し、次のコードを使用しています:
$data = mysql_query("SELECT * FROM example") or die(mysql_error());
$arr = mysql_fetch_assoc($data);
print_r ($arr);
次の結果のみが表示されます。
配列([id] => 1 [amount] => 144)
つまり、実際には、クエリは1つだけでなく、すべてのレコードを取得します。