概要
閲覧数:1432
投稿日:2014-01-29
更新日:2014-01-29
・値が異なったら、順位と値を更新するユーザ定義関数
・同数順位
関数名
・samerank_equal() :
構文
・int samerank_equal ( string $value )
引数
・第 1 引数 … 順位の基準となる値。アクセス数 など
戻値
・int $rank … 順位
注意点
・予め昇順もしくは降順ソートした上での利用が前提
・「static」を利用しているため、同様の処理が連続する場合には、再利用不可
コード
/*
* 値が異なったら、順位と値を更新する関数。※「=数」考慮
* @param string $value 順位の基準となる値
* @return int $rank 順位
*/
function samerank_equal($value)
{
static $rank = 0; //初期値(実際は最初必ず繰り上がるはずなので「1」小さい)
static $equalcount = 0; //「=数」
static $lastValue = null;//最後(前回)基準値…アクセス数
if ($lastValue !== $value) {//異なったら
$rank++; //順位を更新
$lastValue = $value; //前のレコードの値を更新
$rank = $rank+$equalcount;//「=数」考慮
$equalcount = 0;//0に戻す
}else{//同じだったら
$equalcount++;//「=数」増加
}
//デバッグ出力
echo "順位基準値".$value." ― ";//引数…アクセス数
echo "「=回数」".$equalcount." ― ";
echo "順位".$rank." ― ";//順位
echo "最後(前回)基準値".$lastValue." ― ";
echo "返り値順位".$rank." ― ";
return $rank;
}
//単純な配列
$data = array(
5,
4,
4,
3,
2,
2,
1
);
//確認
for ($i=0; $i<count($data); $i++) {
echo samerank_equal($data[$i]) . "位:{$data[$i]}<br /><br />\n";
}結果
順位基準値5 ― 「=回数」0 ― 順位1 ― 最後(前回)基準値5 ― 返り値順位1 ― 1位:5 順位基準値4 ― 「=回数」0 ― 順位2 ― 最後(前回)基準値4 ― 返り値順位2 ― 2位:4 順位基準値4 ― 「=回数」1 ― 順位2 ― 最後(前回)基準値4 ― 返り値順位2 ― 2位:4 順位基準値3 ― 「=回数」0 ― 順位4 ― 最後(前回)基準値3 ― 返り値順位4 ― 4位:3 順位基準値2 ― 「=回数」0 ― 順位5 ― 最後(前回)基準値2 ― 返り値順位5 ― 5位:2 順位基準値2 ― 「=回数」1 ― 順位5 ― 最後(前回)基準値2 ― 返り値順位5 ― 5位:2 順位基準値1 ― 「=回数」0 ― 順位7 ― 最後(前回)基準値1 ― 返り値順位7 ― 7位:1