寄稿しました。
必要なものをインストール
# yum install httpd php # yum install epel-release # yum --enablerepo=epel install php-pecl-redis redis # systemctl restart httpd # systemctl enable httpd # systemctl start redis # systemctl enable redis
ranking.php
# vi /var/www/html/ranking.php
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete('kingyoSkuiRanking1');
$kingyoScore = array(
'Tanaka' => 3,
'Tarou' => 6,
'Ken' => 12,
'Yuu' => 15,
'Emily' => 15,
'Hanako' => 6,
'John' => 20,
'Sato' => 1,
'Natary' => 2,
'Honda' => 1,
'Mary' => 55
);
foreach( $kingyoScore as $player => $score )
{
$redis->zAdd( 'kingyoSkuiRanking1', $score, $player );
}
$result = $redis->zRevRange( 'kingyoSkuiRanking1', 0, 9, true ); // 1. スコアの高い順から降順で10人分リストを取得する
var_dump($result);
// array(10) { ["Mary"]=> float(55) ["John"]=> float(20) ["Yuu"]=> float(15) ["Emily"]=> float(15) ["Ken"]=> float(12) ["Tarou"]=> float(6) ["Hanako"]=> float(6) ["Tanaka"]=> float(3) ["Natary"]=> float(2) ["Sato"]=> float(1) }
echo "<hr/>";
foreach($result as $player => $score) // 2. 自分のキーとポイントを取得 例として1位の[Mary] => float(55)
{
++$score; // 3. 自分のポイントに+1を行い、自分より多いユーザ数を設定する Maryの55+1=56
$rank = ($redis->zCount('kingyoSkuiRanking1', $score, '+inf')+1); // 4. 56のスコアのユーザは0, そこに+1を足してMaryの順位である1になる
echo "{$player}={$rank}<br/>";
}
実行結果
array(10) { ["Mary"]=> float(55) ["John"]=> float(20) ["Yuu"]=> float(15) ["Emily"]=> float(15) ["Ken"]=> float(12) ["Tarou"]=> float(6) ["Hanako"]=> float(6) ["Tanaka"]=> float(3) ["Natary"]=> float(2) ["Sato"]=> float(1) }
Mary=1
John=2
Yuu=3
Emily=3
Ken=5
Tarou=6
Hanako=6
Tanaka=8
Natary=9
Sato=10




