Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用数字、数字字母、字母数字和字母组合对数组进行排序_Php_Arrays - Fatal编程技术网

Php 使用数字、数字字母、字母数字和字母组合对数组进行排序

Php 使用数字、数字字母、字母数字和字母组合对数组进行排序,php,arrays,Php,Arrays,我正在尝试排序和数组,但是,无法获得预期的数组 我有这样一个数组: 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 [1

我正在尝试排序和数组,但是,无法获得预期的数组

我有这样一个数组:

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
)

您可以将用户定义的排序与
uasort
一起使用,请检查


您使用过哪些PHP函数。。。请尝试
natsort()
?@PaulT。我使用了
asort()
。我也测试了
natsort
,但是,在我的案例中,它返回与asort相同的输出,即比较数字与字符串。数组中的所有数字都像27,27是Int还是String?当A1大于1A时,您的定义是什么?所有这些都取决于您的业务逻辑。您可以使用uasort来定制您的Sort。您可以提供给我您的php数组的某个位置来获取它并执行一些测试代码吗?它看起来似乎正在工作,但是,您可以解释一下,
$a
$b
变量指的是什么。@AayushDahal它是的参数
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));
    }
});