【问题标题】:Rank php multidimensional array排名php多维数组
【发布时间】:2015-10-23 10:05:05
【问题描述】:

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

谢谢

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

【问题讨论】:

  • “我好像做错了什么!”介意告诉我们那是什么吗?

标签: php search multidimensional-array rank


【解决方案1】:

你做了无用的代码来做这种排序,使用 usort() 函数,比如:

while($p < $size)  
{ 
  $myarray[] = array("user" => $user[$p], "data" => $scanrate[$p]); 
  $p++; 
} 

usort($myarray, function($a, $b) {
    return $a['data'] - $b['data'];
});

现在您的 $myarray 已排序,您可以搜索并执行您想要的操作。

【讨论】:

    【解决方案2】:

    如果您在 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;
    

    【讨论】:

    • 我是这样实现的; $size = $num_rows; $p = 0; while($p $user[$p]); $scanrate[$p] = array ("数据" => $scanrate[$p]); $p++; } $sort = array_combine($user, $scanrate);但是我似乎还有一个数组 $sort 是错误的问题,我认为我在这里做错了什么,但我不确定是什么。
    • 如果您查看手册:php.net/array_combine 您可以看到 array_combine 将第一个数组作为键,将第二个作为值,并检查数组类型,它们应该是一维的。我不明白你想用那个 while 循环做什么,你正在向数组添加一个维度,这会破坏 array_combine 函数。尝试获取用户列表(数组)和扫描率列表,使用该结构进行排序(否则函数无法正常工作),最后根据需要更改数组的结构。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    相关资源
    最近更新 更多