排名php多维数组

时间:2015-10-23 10:05:06

标签: php search multidimensional-array rank

我正在尝试对一组分数进行排名。所以我从用户表单中获取了输入,并在多维数组中将它们从大到小排序,然后我可以在数组中搜索用户并检索索引以获得其“排名”但是我似乎在做完全错了!任何有关我出错的地方的帮助都会非常感激,或者如果有更好的方法!

谢谢

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;
    }
} 

2 个答案:

答案 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;