概要
閲覧数:1118
投稿日: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