作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这里有一些关于我想要完成的任务的背景知识。我有一个来自正在显示的 MySQL 查询的数组。我想根据一个因素对数组进行排序。该因子是根据文章发布时间和收到的投票数内联计算的。像这样的事情:
// ... MySQL query here
$votes = $row['0']
$seconds = strtotime($record->news_time)+time();
$sum_total = pow($votes,2) / $seconds;
所以传入的数组看起来像这样:
Array (
[0] => stdClass Object (
[id] => 13
[news_title] => Article
[news_url] => http://website.com/article/14
[news_root_domain] => website.com
[news_category] => Business
[news_submitter] => 2
[news_time] => 2013-02-18 12:50:02
[news_points] => 2
)
[1] => stdClass Object (
[id] => 14
[news_title] => Title
[news_url] => http://www.website.com/article/2
[news_root_domain] => www.website.com
[news_category] => Technology
[news_submitter] => 1
[news_time] => 2012-10-02 10:03:22
[news_points] => 8
)
)
我想使用上面提到的因子对上述数组进行排序。这个想法是在列表中首先显示评分最高的文章(使用计算的因子),而不是数组中的默认排序方法。似乎 usort 可能是我最好的选择,但是让我知道你们的想法?
最佳答案
在查询中完成所有操作:
SELECT n.*, ( POW(?, 2) / (UNIX_TIMESTAMP(n.news_time) + UNIX_TIMESTAMP(NOW())) ) as rank
FROM news_table n
ORDER BY rank;
现在为了获得选票,您可能必须执行子查询或联接,但我无法就此提供建议,因为您没有提供有关选票来源的足够信息。但是,您也可以向查询提供投票,而不是一次性选择所有选项,例如:
$sql = sprintf('SELECT n.*, ( POW(%d, 2) / (UNIX_TIMESTAMP(n.news_time) + UNIX_TIMESTAMP(NOW())) ) as rank FROM news_table n ORDER BY rank', $votes);
除此之外,是的,您可以使用 usort,但这也需要您将整个记录集放在内存中才能提供准确的排序,这在某些时候可能会出现问题。
关于PHP - 基于 Off Factor 对数组进行排序::usort?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15030934/
我是一名优秀的程序员,十分优秀!