Я хочу использовать результаты в массиве и отсортировать их, используя алгоритм ранжирования, подобный, например, Hacker News или Reddit.
Например, перефразируя алгоритм HN :
Оценка = P / (T + 2) ^ G
where,
P = points of an item (e.g. votes + comments + likes)
T = time since submission (in hours)
G = Gravity, (on HN defaults to 1.8)
Из того, что я понимаю, мне нужно использовать массив сортировки PHP, но руководство по PHP вводит в заблуждение, и подобные ответы на StackOverflow имеют очень конкретные ответы без большого количества комментариев относительно того, что делает функция. например здесь , здесь & здесь .
Мои данные выглядят следующим образом
Array
(
[0] => Array
(
[post_created] => 2011-12-12 07:18:17
[post_num_likes] => 1
[post_num_comments] => 0
[post_message] => Some message
[votes] => 16
)
[1] => Array
(
[post_created] => 2011-12-11 22:17:16
[post_num_likes] => 0
[post_num_comments] => 4
[post_message] => Another message
[votes] => 21
)
[2] => Array
(
[post_created] => 2011-12-11 20:21:11
[post_num_likes] => 1
[post_num_comments] => 2
[post_message] => Next message
[votes] => 1
)
[3] => Array
(
[post_created] => 2011-12-11 20:11:47
[post_num_likes] => 0
[post_num_comments] => 0
[post_message] => Something else
[votes] => 0
)
[4] => Array
(
[post_created] => 2011-12-11 20:09:46
[post_num_likes] => 1
[post_num_comments] => 0
[post_message] => Another message
[votes] => 5
)
Насколько я понимаю, мне нужно сделать что-то вроде следующего:
// Send array as 2nd parameter due to way you call functions in CodeIgniter
uksort($array, array('Class_name','postrank'));
function postrank($a, $b) {
// some sorting function here
return strcmp($a, $b);
}
Я пробовал копировать и вставлять различные функции, но поскольку они не так хорошо прокомментированы, трудно понять, что происходит.
Как мне повторить подобную функцию сортировки по рейтингу постов с вышеуказанными данными?