0

データセットの最頻値、中央値、平均値を計算するスクリプトを書いています。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つだけでなく、すべてのレコードを取得します。

4

2 に答える 2

1

その理由は、1 つの行、つまり 1 つの数値しか取得していないためです...

$arr = array();

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

このコードの後、正しい値を計算できるはずです。

于 2012-08-12T12:31:20.417 に答える
0

それが役立つかどうかはわかりませんが、mysql-fetch array() を掘り下げて、そこの推奨事項に従うことをお勧めします。 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; 
} 
于 2012-08-12T11:51:18.253 に答える