Redisでランキングを作ろうとしたんだ(完結編)

May 18, 2012
php redis

前回の「Redisでランキングを作ろうとしたんだ」で悩んでた部分が解決できました。
かばだんなさん様からのコメントをいただき、対応できました。
本当に感謝しています!!

んでもって、結局こんな感じのコードになれば同一を含んだランキングが取得できるかと思います。

<?php
$server  = "localhost";
$port    = 6379; $timeout = 2.5;
$redis = new Redis();
$redis->connect($server,$port,$timeout);

// 得点
$userPoint = array(
    'さんま'   => 200000,
    'たけし'   => 4000,
    'ところ'       => 300,
    'いたお'       => 200,
    'はまだ'       => 100,
    'やまだ'       => 100,
    'はざま'       => 40
);

// 得点をセットする
foreach( $userPoint as $user => $point ) {
    $redis->zAdd('test_rank', $point, $user );
}

// 一覧を表示する
$ranking = $redis->zRevRange( 'test_rank', 0, -1, true );
foreach($ranking as $user => $score ) {
    $score++;
    echo "$user=".($redis->zCount('test_rank', $score, '+inf')+1)."\n";
}

実行結果

さんま=1
たけし=2
ところ=3
いたお=4
やまだ=5
はまだ=5
はざま=7
comments powered by Disqus