dshakcsq64956 2016-08-23 08:14
浏览 69
已采纳

按字母顺序和数字排序的排序功能

I have an array that looks like this:

Array ( [0] => Array ( [id] => 1103 [age] => 37 [gen] => C:3:2:5:1:4 ) [1] => Array ( [id] => 1104 [age] => 37 [gen] => A:3:1:4:1 ) [2] => Array ( [id] => 1105 [age] => 36 [gen] => A:3:2:3:2  ) [3] => Array ( [id] => 1106 [age] => 32 [gen] => B:2:5:1:2:2 ) [4] => Array ( [id] => 1107 [age] => 31 [gen] => C:3:4:4:5:3 [5] => Array ( [id] => 1104 [age] => 37 [gen] => A:3:1:4:1:6 ))

I want to sort the array by the gen key so the result will be like this:

A:3:1:4:1:6

A:3:2:3:2

B:2:5:1:2:2

C:3:2:5:1:4

C:3:4:4:5:3

I tried this code:

    uasort($newArray, function($a, $b) {
        return strnatcasecmp($a['ngen'], $b['ngen']);
    });

But can´t get the correct result. Any ideas?

  • 写回答

2条回答 默认 最新

  • dpt62283 2016-08-23 08:35
    关注

    This function will help you to sort the array, just pass the key by which the array is to be sort.

    function build_sorter($key)
    {
        return function ($a, $b) use ($key) {
            return strnatcmp($a[$key], $b[$key]);
        };
    }
    

    Example Code:

    $results = array(0 => array ( 'id' => 1103, 'age' => 37, 'gen' => 'C:3:2:5:1:4' ),
                      1 => array ( 'id' => 1104, 'age' => 37, 'gen' => 'A:3:1:4:1' ),
                      2 => array ( 'id' => 1105, 'age' => 36, 'gen' => 'A:3:2:3:2' ),
                      3 => array ( 'id' => 1106, 'age' => 32, 'gen' => 'B:2:5:1:2:2' ),
                      4 => array ( 'id' => 1107, 'age' => 31, 'gen' => 'C:3:4:4:5:3' ),
                      5 => array ( 'id' => 1104, 'age' => 37, 'gen' => 'A:3:1:4:1:6' )
                     ); 
    
    usort($results, build_sorter('gen'));
    echo "<pre>"; print_r($results) ;
    

    Just call build_sorter('gen') in usort callback and pass key gen

    This will hive you :

    Array
    (
        [0] => Array
            (
                [id] => 1104
                [age] => 37
                [gen] => A:3:1:4:1
            )
    
        [1] => Array
            (
                [id] => 1104
                [age] => 37
                [gen] => A:3:1:4:1:6
            )
    
        [2] => Array
            (
                [id] => 1105
                [age] => 36
                [gen] => A:3:2:3:2
            )
    
        [3] => Array
            (
                [id] => 1106
                [age] => 32
                [gen] => B:2:5:1:2:2
            )
    
        [4] => Array
            (
                [id] => 1103
                [age] => 37
                [gen] => C:3:2:5:1:4
            )
    
        [5] => Array
            (
                [id] => 1107
                [age] => 31
                [gen] => C:3:4:4:5:3
            )
    
    )
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 python:excel数据写入多个对应word文档
  • ¥60 全一数分解素因子和素数循环节位数
  • ¥15 ffmpeg如何安装到虚拟环境
  • ¥188 寻找能做王者评分提取的
  • ¥15 matlab用simulink求解一个二阶微分方程,要求截图
  • ¥30 乘子法解约束最优化问题的matlab代码文件,最好有matlab代码文件
  • ¥15 写论文,需要数据支撑
  • ¥15 identifier of an instance of 类 was altered from xx to xx错误
  • ¥100 反编译微信小游戏求指导
  • ¥15 docker模式webrtc-streamer 无法播放公网rtsp