douyou2368 2018-06-02 08:11
浏览 28
已采纳

在PHP 7中对关联数组进行排序[重复]

This question already has an answer here:

Given the following example:

$user1 = array('username' => 'test1', 'score' => 2000, 'someotherdata' => 1.0);
$user2 = array('username' => 'test2', 'score' => 4325, 'someotherdata' => 2.0);
$user3 = array('username' => 'test3', 'score' => 624534, 'someotherdata' => 3.0);
$user4 = array('username' => 'test4', 'score' => 564, 'someotherdata' => 1.4);
$user5 = array('username' => 'test5', 'score' => 34256, 'someotherdata' => 1.5);
$user6 = array('username' => 'test6', 'score' => 5476, 'someotherdata' => 1.8);

$arr = array($user1, $user2, $user3, $user4, $user5, $user6);

How would I be able to sort $arr by the field score nicely in PHP 7? I got a working bubblesort I made my own, but is there a way to use builtin PHP 7 features to do it nicely, as bubblesort is pretty expensive (I could do a Quicksort on my own, but before I do that I wanted to know if there is a better way).

</div>
  • 写回答

2条回答 默认 最新

  • doutuo1908 2018-06-02 08:16
    关注

    You can use usort

    $user1 = array('username' => 'test1', 'score' => 2000, 'someotherdata' => 1.0);
    $user2 = array('username' => 'test2', 'score' => 4325, 'someotherdata' => 2.0);
    $user3 = array('username' => 'test3', 'score' => 624534, 'someotherdata' => 3.0);
    $user4 = array('username' => 'test4', 'score' => 564, 'someotherdata' => 1.4);
    $user5 = array('username' => 'test5', 'score' => 34256, 'someotherdata' => 1.5);
    $user6 = array('username' => 'test6', 'score' => 5476, 'someotherdata' => 1.8);
    
    $arr = array($user1, $user2, $user3, $user4, $user5, $user6);
    
    usort($arr, function($a, $b){
        return $a['score'] - $b['score'];
    });
    
    echo "<pre>";
    print_r( $arr );
    echo "</pre>";
    

    This will result to:

    Array
    (
        [0] => Array
            (
                [username] => test4
                [score] => 564
                [someotherdata] => 1.4
            )
    
        [1] => Array
            (
                [username] => test1
                [score] => 2000
                [someotherdata] => 1
            )
    
        [2] => Array
            (
                [username] => test2
                [score] => 4325
                [someotherdata] => 2
            )
    
        [3] => Array
            (
                [username] => test6
                [score] => 5476
                [someotherdata] => 1.8
            )
    
        [4] => Array
            (
                [username] => test5
                [score] => 34256
                [someotherdata] => 1.5
            )
    
        [5] => Array
            (
                [username] => test3
                [score] => 624534
                [someotherdata] => 3
            )
    
    )
    

    Doc: usort()

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?