php - 将中值函数与排序和数组结合使用

标签 php mysql

我正在尝试计算数组的中位数。我能够获得最小值、最大值、平均值,但我在中位数和显示信息排序方式方面遇到困难。

我的问题是如何为每个状态单独使用一个函数来获得中位数。 (状态为A、C、E、L、P、W)

我的代码是:

<?php
echo "<p><b>A</b> = Active, <b>E</b> = Expired, <b>L</b> = Canceled, <b>P</b> = Pending, <b>W</b> = Withdrawn</p>\n";
// COUNT STATUS
include '_inc/include.php';
$query = "SELECT status, COUNT(status) FROM median GROUP BY status"; 

$result = mysql_query($query) or die(mysql_error());

// Print out result
while($row = mysql_fetch_array($result)){
echo "There are ". $row['COUNT(status)'] ." ". $row['status'] ." items.";
echo "<br />";
}
?>

显示为:

A = 有效、C = 已关闭、E = 已过期、L = 已取消、P = 待处理、W = 已撤回

有 6 个 A 项

有 2 个 C 项

共有 9 个 E 项

共有 4 L 项

有 2 P 项

我的代码是:

$query = "SELECT listprice, status, MIN(listprice), COUNT(status) FROM median GROUP BY status"; 

$result = mysql_query($query) or die(mysql_error());

// Print out result
while($row = mysql_fetch_array($result)){
echo "The MIN list price for the  ". $row['COUNT(status)'] ." ". $row['status'] ." is $" .    $row['MIN(listprice)'];
echo "<br />";
}
?>

显示为:

6 A 的最低标价为 139900.00 美元

2 C 的最低标价为 149900.00 美元

9 E 的最低标价为 138000.00 美元

4 L 的最低标价为 229000.00 美元

2 P 的最低标价为 179000.00 美元

MAX和AVG与上面类似。

我尝试包含一个计算中位数 (MED) 的函数

<?php
function median($arr)
{
sort($arr);
$count = count($arr); //count the number of values in array
$middleval = floor(($count-1)/2); // find the middle value, or the lowest middle value
if ($count % 2) { // odd number, middle is the median
    $median = $arr[$middleval];
} else { // even number, calculate avg of 2 medians
    $low = $arr[$middleval];
    $high = $arr[$middleval+1];
    $median = (($low+$high)/2);
}
return $median;
}

echo median(array($lp)) . "\n";  // 153500
echo "<p> </p>";
echo median(array(4.1, 7.2, 1.7, 9.3, 4.4, 3.2)) . "\n";       // 4.25

?>

这适用于静态数组,但我如何计算它以使其看起来像上面的 MIN、MAX?

<?php
$i=0;
while ($i < $num) {

$ld=mysql_result($result,$i,"listdate");
$cd=mysql_result($result,$i,"closedate");
$contractd=mysql_result($result,$i,"contractdate");
$s=mysql_result($result,$i,"status");
$scd=mysql_result($result,$i,"statuschangedate");
$wd=mysql_result($result,$i,"withdrawdate");
$cand=mysql_result($result,$i,"canceldate");
$lp=mysql_result($result,$i, "listprice");
$sp=mysql_result($result,$i,"soldprice");
$gla=mysql_result($result,$i,"gla");
$b=mysql_result($result,$i,"built");
$o=mysql_result($result,$i,"owner");
$fs=mysql_result($result,$i,"fore");
$ss=mysql_result($result,$i,"shortsale");
$f=mysql_result($result,$i,"features");
?>

我想我遇到这么多麻烦的原因可能是表中的数据是通过文件上传(csv)上传的。但我认为这与此没有任何关系,因为数据已经存在。

我使用 $lp 作为 listprice 来代替中值函数中的静态数组,也就是说它会变成空白。

最佳答案

...that is where it goes blank.

空白页表示 PHP 发生错误,但错误显示设置已关闭。确保您turn on error reporting查看问题。

重要的是,已弃用的 mysql_result() 函数将从 MySQL 结果集中检索一个单元格的内容。如果您希望通过传递中值函数 array($lp) 来获得多个值,那么这种情况就不会发生。此外,如果 mysql_result() 函数失败或未找到结果,它会返回 false,这意味着您传递给中值函数的数组现在是 array(false)

这些是故障排除时需要记住的一些事情。打开错误报告,问题应该更容易推断出来。

关于php - 将中值函数与排序和数组结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14960550/

相关文章:

php - 需要组织的旧 PHP 项目

MySQL - 按两列的算术/函数调用结果排序结果

php - Jquery:如何验证值已经存在于动态文本框中

php - 如何在 PHP 中将日期转换为时间戳?

php - 排列我的查询的结果集,出了点问题

java - 用java监控sql连接信息

mysql - Filemaker Pro 并在 html 中生成统计数据

php - 如何在MySQL插入查询中自动插入特定日期和特定时间

php - 500 内部错误 - 连接到外部 WordPress 数据库时 PHP 超时

php - 找不到类 'mysqli_connect'