我正在尝试对一组分数进行排名。所以我从用户表单中获取了输入,并在多维数组中将它们从大到小排序,然后我可以在数组中搜索用户并检索索引以获得其“排名”但是我似乎在做完全错了!任何有关我出错的地方的帮助都会非常感激,或者如果有更好的方法!
谢谢
PHP代码:
if ( isset( $_POST['submit'] ) ) {
$size = $num_rows;
$p = 0;
$myarray = array();
while ( $p < $size ) {
$myarray[] = array( "user" => $user[$p], "data" => $scanrate[$p] );
$p++;
}
$sort = array();
foreach ( $myarray as $k => $v ) {
$sort['data'][$k] = $v['data'];
}
array_multisort( $sort['data'], SORT_DESC, $myarray );
for ( $i = 0; $i < $num_rows; $i++ ) {
$key = array_search( $i, array_column( $myarray, 'user' ) );
if ( !$key ) {
$key = $num_rows;
}
//this is stored into my database
echo "<br>User " . $user[$i] . " scan rate " . $scanrate[$i] . " rank " . $key;
}
}
答案 0 :(得分:0)
您使用无用的代码进行此类排序,使用usort()函数,如:
while($p < $size)
{
$myarray[] = array("user" => $user[$p], "data" => $scanrate[$p]);
$p++;
}
usort($myarray, function($a, $b) {
return $a['data'] - $b['data'];
});
现在您的$ myarray已经排序,您可以搜索并执行您想要的操作。
答案 1 :(得分:0)
如果你在smt上投入太多精力。使用脚本语言,你肯定做错了......
$sort = array_combine($user, $scanrate);
asort($sort);
// $sort is sorted now, used it as you like:
// List them
foreach ($sort as $user => $scanrate) {
echo "<br>User " . $user . " scan rate " . $scanrate . " rank " . ++$i;
}
// Find the rank of specific user:
echo array_search('matt', array_keys($sort)) + 1;