0

试图在 MYSQL 数据库中找到数组的中位数。

目前,我正在抓取我的数据,如下所示:

$middleMonth = "SELECT Day, COUNT(Day) AS totalNumber FROM finalbaby GROUP BY Day ORDER BY COUNT(Day) DESC LIMIT 1, 300";
$middleResult = mysql_query($middleMonth);

然后我将它放入这样的数组中。

$names=array();
while($row = mysql_fetch_assoc($middleResult)) {
$names[] = $row['Day'];

然后我试图找到该数组的中位数:

            sort($names);
            $count = count($names);
            $middleval = floor(($count-1)/2); 
                if($count % 2) { 
                    $median = $names[$middleval];
                } else { 
                    $low = $names[$middleval];
                    $high = $names[$middleval+1];
                    $median = (($low+$high)/2);
                }

        return $median;

        }

        var_dump($names);

我没有收到任何错误,但它使我的应用程序崩溃。

关于我做错了什么有什么建议吗?

4

1 回答 1

1

您是否在第三个代码块之前关闭了第二个代码黑色的 while?

回答:

我在最后一个 } 中关闭了一段时间

失败...在第三个代码块中运行代码之前在第二个代码块中关闭...这将只找到一次中位数,而不是每次您从 mysql 返回的行设置名称时都尝试找到中位数。第一次,名称的计数为 1,然后减去 1 = 0 并除以 2。这将为您提供 0。然后您尝试获取 0 和 2 的其余部分。这将丢弃您的其余代码。试试这个:

$middleMonth = "SELECT Day, COUNT(Day) AS totalNumber FROM finalbaby GROUP BY Day ORDER BY COUNT(Day) DESC LIMIT 1, 300";
$middleResult = mysql_query($middleMonth);
$names=array();
while($row = mysql_fetch_assoc($middleResult)) {
    $names[] = $row['Day'];
}
sort($names);
$count = count($names);
$middleval = floor(($count-1)/2); 
if($count % 2) { 
    $median = $names[$middleval];
} else { 
    $low = $names[$middleval];
    $high = $names[$middleval+1];
    $median = (($low+$high)/2);
}
echo $median;
var_dump($names);

//previous code
//if this code is inside function then return if not then print
//return $median;
//if this code is inside function then the return above will cancel this var_dump
//var_dump($names);

也请记住

警告!此扩展自 PHP 5.5.0 起已弃用,并将在未来删除。相反,应该使用MySQLiPDO_MySQL扩展。另请参阅MySQL:选择 API指南和相关的常见问题解答以获取更多信息。

于 2013-07-16T19:52:07.747 回答