配列の中央値を計算しようとしています。MIN、MAX、AVGを取得できましたが、中央値とディスプレイが情報を並べ替える方法に問題があります。
私の質問は、ステータスごとに個別に関数を使用して、中央値を取得するにはどうすればよいですか。(ステータスは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アイテムがあります
Lアイテムは4つあります
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 />";
}
?>
表示は次のとおりです。
6AのMIN定価は$139900.00です
2CのMIN定価は$149900.00です
9EのMIN定価は$138000.00です
4LのMIN定価は$229000.00です
2PのMIN定価は$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)でアップロードされているからかもしれません。しかし、データはすでにそこにあるので、それが実際にそれと関係があるとは思いませんでした。
median関数の静的配列の代わりにlistpriceに$lpを使用しました。つまり、空白になります。