Reddit ranking algorithms (PHP)


粗略的問了大神.可是卻沒發現相類似的PHP版本
所以只好花了點時間來將 Ruby 版本轉了一下
另外還將相對應的 confidence sort 也轉了過來..

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
// Zeuxis Lo
// Created at 2011-03-23 05:05 PM

date_default_timezone_set("Asia/Hong_Kong");

function calculate_rank_sum($score, $created_at) {
$order = log10(max(abs($score), 1));

if ($score > 0) {
$sign = 1;
}elseif ($score < 0) {
$sign = -1;
}else{
$sign = 0;
}

$seconds = intval(($created_at - mktime(0, 0, 0, 1, 1, 1970))/86400);
$long_number = $order + $sign * $seconds / 45000;

return round($long_number, 7);
}

function confidence($ups, $downs) {
if ($ups + $downs == 0) {
return 0;
}else{
$n = $ups + $downs;

if ($n == 0) return 0;

$z = 1.0;
$phat = (float)$ups / $n;
return sqrt($phat+$z*$z/(2*$n)-$z*(($phat*(1-$phat)+$z*$z/(4*$n))/$n))/(1+$z*$z/$n);
}
}

echo calculate_rank_sum(10, time()), "\n";
echo confidence(10, 0), "\n";
?>

參考:
http://stackoverflow.com/questions/5365525/why-is-my-rank-sum-database-column-still-nil
http://amix.dk/blog/post/19588