仅使用数字,数字字母,字母数字和字母的组合对数组排序

Aayush Dahal

我正在尝试排序和数组,但是无法按预期获取数组。

我有一个像这样的数组:

Array
(
    [0] => 5
    [1] => 7
    [2] => 8
    [3] => 9
    [4] => 10
    [5] => 11
    [6] => 12
    [7] => 13
    [8] => 14
    [9] => 15
    [10] => 16
    [11] => 17
    [12] => 18
    [13] => 19
    [14] => 20
    [15] => 21
    [16] => 23
    [17] => 24
    [18] => 26
    [19] => 28
    [20] => 29
    [21] => 30
    [22] => 31
    [23] => 32
    [24] => 33
    [25] => 34
    [26] => 35
    [27] => 36
    [28] => 37
    [29] => 38
    [30] => 39
    [31] => 40
    [32] => 41
    [33] => 42
    [34] => 44
    [35] => 46
    [36] => 48
    [37] => 50
    [38] => 52
    [39] => 54
    [40] => A
    [41] => B
    [42] => 3
    [43] => 4
    [44] => 6
    [45] => A1
    [46] => B1
    [47] => 1A
    [48] => 22
    [49] => 25
    [50] => 27
    [51] => 1B
)

当我运行asort($ arr)时,它返回:

Array
(
    [47] => 1A
    [51] => 1B
    [42] => 3
    [43] => 4
    [0] => 5
    [44] => 6
    [1] => 7
    [2] => 8
    [3] => 9
    [4] => 10
    [5] => 11
    [6] => 12
    [7] => 13
    [8] => 14
    [9] => 15
    [10] => 16
    [11] => 17
    [12] => 18
    [13] => 19
    [14] => 20
    [15] => 21
    [48] => 22
    [16] => 23
    [17] => 24
    [49] => 25
    [18] => 26
    [50] => 27
    [19] => 28
    [20] => 29
    [21] => 30
    [22] => 31
    [23] => 32
    [24] => 33
    [25] => 34
    [26] => 35
    [27] => 36
    [28] => 37
    [29] => 38
    [30] => 39
    [31] => 40
    [32] => 41
    [33] => 42
    [34] => 44
    [35] => 46
    [36] => 48
    [37] => 50
    [38] => 52
    [39] => 54
    [40] => A
    [45] => A1
    [41] => B
    [46] => B1
)

它正常排序,但是,我愿意根据数字,数字字母,字母数字,字母之类的组合对其进行排序。

例如,此数组应类似于:

Array
(
    [42] => 3
    [43] => 4
    [0] => 5
    [44] => 6
    [1] => 7
    [2] => 8
    [3] => 9
    [4] => 10
    [5] => 11
    [6] => 12
    [7] => 13
    [8] => 14
    [9] => 15
    [10] => 16
    [11] => 17
    [12] => 18
    [13] => 19
    [14] => 20
    [15] => 21
    [48] => 22
    [16] => 23
    [17] => 24
    [49] => 25
    [18] => 26
    [50] => 27
    [19] => 28
    [20] => 29
    [21] => 30
    [22] => 31
    [23] => 32
    [24] => 33
    [25] => 34
    [26] => 35
    [27] => 36
    [28] => 37
    [29] => 38
    [30] => 39
    [31] => 40
    [32] => 41
    [33] => 42
    [34] => 44
    [35] => 46
    [36] => 48
    [37] => 50
    [38] => 52
    [39] => 54
    [47] => 1A
    [51] => 1B
    [45] => A1
    [46] => B1
    [40] => A
    [41] => B
)
LF00

您可以使用用户定义的排序uasort,查看演示

uasort($array,function($a,$b){
    if(is_numeric($a) && is_numeric($b)){
        return $a - $b;
    }elseif(is_numeric($a)){
        return -1;
    }elseif(is_numeric($b)){
        return 1;
    }else{
        $length = max(strlen($a),strlen($b));
        return strcmp(str_pad($a,$length,"z",STR_PAD_LEFT),str_pad($b,$length,"z",STR_PAD_LEFT));
    }
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章