寄稿しました。
必要なものをインストール
# 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