我没有太多使用 PHP 的经验,但我开发了一个粗略的算法来确定社交网络上的前 10 名用户,就关注者数量而言。它确实返回了一个似乎正确的用户列表,但我可以看到这有两个问题:
这似乎非常重复且资源密集,尤其是在我们有很多用户的情况下。如果用户没有比最后一个位置更多的关注者,是否有一种简单的方法可以使算法短路,同时仍然保持排序顺序?如何压缩/简化算法?
它并不完全有效。它返回的用户列表不是前 10 名用户。例如,现在运行脚本会返回具有以下关注者计数的用户(按顺序):54、7、6、4、1、3、2、2、1、1。这些数字似乎正确,但我知道一个事实至少有两个其他用户的关注者数量高于 54。另外,第 5 个用户不合适。这是我们算法的问题还是其他问题(也许我们如何存储关注者)?
这是有问题的代码:
$array = array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
$result = mysql_query("SELECT * FROM users") or die(mysql_error());;
for($i = 0; $user = mysql_fetch_array($result, MYSQL_NUM); $i++) {
if (following($user[0]) > following($array[0])) $array[0] = $user[0];
else if (following($user[0]) > following($array[1])) $array[1] = $user[0];
else if (following($user[0]) > following($array[2])) $array[2] = $user[0];
else if (following($user[0]) > following($array[3])) $array[3] = $user[0];
else if (following($user[0]) > following($array[4])) $array[4] = $user[0];
else if (following($user[0]) > following($array[5])) $array[5] = $user[0];
else if (following($user[0]) > following($array[6])) $array[6] = $user[0];
else if (following($user[0]) > following($array[7])) $array[7] = $user[0];
else if (following($user[0]) > following($array[8])) $array[8] = $user[0];
else if (following($user[0]) > following($array[9])) $array[9] = $user[0];
}
在此之后,它将数组输入到 MySQL 表中。提前致谢。
编辑:这是追随者功能的代码。
function followers($id){
$query = mysql_query("SELECT * FROM follow WHERE following='$id' AND follower!='$id'");
return mysql_num_rows($query);
}