gpt4 book ai didi

php - 为什么我的 usort() 输出没有排序?

转载 作者:行者123 更新时间:2023-12-04 21:12:32 35 4
gpt4 key购买 nike

我正在重写一个旧脚本,该脚本使用 usort 吐出最受欢迎的内容。

出于某种原因,我的 usort 的输出实际上没有排序。

我正在使用 php 5.5(请忽略已贬值的 mysql_ 函数的使用,这是我重写此脚本的部分原因)。

    //store data in array
$sort_array = array();
while($row = mysql_fetch_assoc($result)) {
//calculate age
$age = (strtotime("now") - strtotime($row["DATE"]))/86400;//86400 converts seconds to days
//calculate "effective views" via gaussian distribution shown below
//y = e^(-(k * x)^2) where k is below
$K = 0.1665109222315395512706329289790402095261177704528881;//solved for a half-life of 5 days
$effective_views = round($row["VIEWS"] * exp(-pow( $K * $age, 2)));

//store data
$article = new stdClass;
//$article->id = $row["ID"];
$article->effective_views = $effective_views;
//$article->title = $row["TITLE"];
//$article->author = $row["AUTHOR"];
$sort_array[] = $article;
}

//sort array based on effective views
usort(
$sort_array,
function($a, $b) {
return -strcmp($a->effective_views, $b->effective_views);
}
);
echo "<pre>";
print_r($sort_array);

输出应该在 effective_views 上按降序排序,但事实并非如此。

这是一个输出转储:

http://pastebin.com/rV5YwWN7

请告诉我我在这里做错了什么。

最佳答案

问题是使用strcmp 来比较数字;它在 lexicographical 中比较字符串方式,或“如字典中所见”。这使得“96”出现在“503”之后,或者在反向排序时出现在“503”之前。

考虑以下内容,当 a < b 时返回负数,当 a > b 时返回正数,否则返回 0 - 当与 usort 风格的比较函数一起使用时,它有效地颠倒了数字的顺序。

return $a->effective_views - $b->effective_views;

关于php - 为什么我的 usort() 输出没有排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25325464/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com