基于评级公式的PHP数组排序


PHP Array ordering based on a rating formula?

我正试图使用我创建的评分论坛来排序一组结果,它的工作原理是根据发布后的时间创建一个新的评分值。

以下是评级公式:评级随着时间的推移而降低(时间以unix时间戳格式表示)

$new_rating = $current_rating / ($current_time - $post_time);
Array
(
[0] => Submissions Object
    (
        [title] => Exploits Emerge For Linux Privilege Escalation Flaw
        [link] => http://test.com
        [description] => test description test
        [tags] => hardware,government,libya
        [rating] => 10
        [date] => 1327546314
    )
[1] => Submissions Object
    (
        [title] => High School Students Send Lego Man 24 Kilometers High
        [link] => http://test.com
        [description] => test description test
        [tags] => hardware,government,libya
        [rating] => 5
        [date] => 1327546305
    )

)

我的问题是如何使用上面的公式对数组进行排序?或者他们是我可以将这个公式插入mysql查询语句的一种方式吗?

非常感谢大家。

您将希望使用usort和自定义排序函数。

function get_rating($obj)
{
    $obj->rating / (time() - $obj->date);
}
function my_compare_func($a, $b)
{
    $a = get_rating($a);
    $b = get_rating($b);
    if($a == $b) return 0;
    return ($a > $b)? 1: -1;
}
usort($array_of_objs, 'my_compare_func');

您必须使用usort()函数。

使用usort的方法应该是可行的:

usort($objects, function($a, $b) {
$rating_of_a = $a['rating'] / ($current_time - $a['date']);
$rating_of_b = $b['rating'] / ($current_time - $b['date']);
return ($rating_of_a < $rating_of_b) ? -1 : 1;
});