按数值中的字符数对数组进行排序

时间:2014-01-04 06:23:42

标签: php arrays sorting

我想按字符数的升序排序数组。

示例数组未排序。

Array(
    [0] => 1
    [1] => 10
    [2] => 100
    [3] => 101
    [4] => 103
    [5] => 104
    [6] => 105
    [7] => 106
    [8] => 107-B
    [9] => 108
    [10] => 110
    [11] => 111
    [12] => 112
    [13] => 113
    [14] => 114
    [15] => 115
    [16] => 116
    [17] => 117
    [18] => 118
    [19] => 119
    [20] => 12
    [21] => 12-A
    [22] => 120
    [23] => 121
    [24] => 122
    [25] => 123
    [26] => 124
    [27] => 125
    [28] => 126
    [29] => 127
    [30] => 128
    [31] => 129
    [32] => 130
    [33] => 131
    [34] => 132
    [35] => 133
    [36] => 134
    [37] => 135
    [38] => 136
    [39] => 137
    [40] => 138
    [41] => 139
    [42] => 14-A
    [43] => 14-B
    [44] => 140
    [45] => 141
    [46] => 142
    [47] => 143
    [48] => 144
    [49] => 145
    [50] => 146
    [51] => 147
    [52] => 148
    [53] => 149
    [54] => 15
    [55] => 151
    [56] => 152
    [57] => 153
    [58] => 154
    [59] => 155
    [60] => 156-A
    [61] => 158
    [62] => 159
    [63] => 16
    [64] => 160
)

我想要这种类型的数组见下面的数组...

Array(
    [0] => 1
    [1] => 2
    [2] => 2-A
    [3] => 2-B
    [4] => 3
    [5] => 4
    [6] => 5
    [7] => 10
    [8] => 11
    [9] => 12
    [10] => 12-A
)

3 个答案:

答案 0 :(得分:3)

使用区分大小写的natsort或不区分大小写的natcasesort,它会将自然顺序排序算法应用于您的数组。

这是你的阵列:

$arr = array(
    "1",     "10",    "100",   "101",   "103",   "104",   "105",   "106",   "107-B", "108",   "110",   "111",   "112",
    "113",   "114",   "115",   "116",   "117",   "118",   "119",   "12",    "12-A",  "120",   "121",   "122",   "123",
    "124",   "125",   "126",   "127",   "128",   "129",   "130",   "131",   "132",   "133",   "134",   "135",   "136",
    "137",   "138",   "139",   "14-A",  "14-B",  "140",   "141",   "142",   "143",   "144",   "145",   "146",   "147",
    "148",   "149",   "15",    "151",   "152",   "153",   "154",   "155",   "156-A", "158",   "159",   "16",    "160"
);

使用上述两个函数之一对其进行排序:

natsort($arr);
print_r($arr);

输出将是:

Array
(
    [0] => 1
    [1] => 10
    [20] => 12
    [21] => 12-A
    [42] => 14-A
    [43] => 14-B
    [54] => 15
    [63] => 16
    [2] => 100
    [3] => 101
    [4] => 103
    [5] => 104
    [6] => 105
    [7] => 106
    [8] => 107-B
    [9] => 108
    [10] => 110
    [11] => 111
    [12] => 112
    [13] => 113
    [14] => 114
    [15] => 115
    [16] => 116
    [17] => 117
    [18] => 118
    [19] => 119
    [22] => 120
    [23] => 121
    [24] => 122
    [25] => 123
    [26] => 124
    [27] => 125
    [28] => 126
    [29] => 127
    [30] => 128
    [31] => 129
    [32] => 130
    [33] => 131
    [34] => 132
    [35] => 133
    [36] => 134
    [37] => 135
    [38] => 136
    [39] => 137
    [40] => 138
    [41] => 139
    [44] => 140
    [45] => 141
    [46] => 142
    [47] => 143
    [48] => 144
    [49] => 145
    [50] => 146
    [51] => 147
    [52] => 148
    [53] => 149
    [55] => 151
    [56] => 152
    [57] => 153
    [58] => 154
    [59] => 155
    [60] => 156-A
    [61] => 158
    [62] => 159
    [64] => 160
)

答案 1 :(得分:1)

natsort - 使用“自然顺序”算法对数组进行排序。

$array=array('09', '8', '10', '009', '011', '0');
print_r(natsort($array));
result:
Array
(
[0] => 0
[1] => 8
[2] => 009
[3] => 09
[4] => 10
[5] => 011
)

答案 2 :(得分:0)

使用natsort似乎运作良好。这些或其他任务有l ots of different PHP sorting functions。编码示例&输出如下:

$test_array = array();
$test_array[0] = '1';
$test_array[1] = '10';
$test_array[2] = '100';
$test_array[3] = '101';
$test_array[4] = '103';
$test_array[5] = '104';
$test_array[6] = '105';
$test_array[7] = '106';
$test_array[8] = '107-B';
$test_array[9] = '108';
$test_array[10] = '110';
$test_array[11] = '111';
$test_array[12] = '112';
$test_array[13] = '113';
$test_array[14] = '114';
$test_array[15] = '115';
$test_array[16] = '116';
$test_array[17] = '117';
$test_array[18] = '118';
$test_array[19] = '119';
$test_array[20] = '12';
$test_array[21] = '12-A';
$test_array[22] = '120';
$test_array[23] = '121';
$test_array[24] = '122';
$test_array[25] = '123';
$test_array[26] = '124';
$test_array[27] = '125';
$test_array[28] = '126';
$test_array[29] = '127';
$test_array[30] = '128';
$test_array[31] = '129';
$test_array[32] = '130';
$test_array[33] = '131';
$test_array[34] = '132';
$test_array[35] = '133';
$test_array[36] = '134';
$test_array[37] = '135';
$test_array[38] = '136';
$test_array[39] = '137';
$test_array[40] = '138';
$test_array[41] = '139';
$test_array[42] = '14-A';
$test_array[43] = '14-B';
$test_array[44] = '140';
$test_array[45] = '141';
$test_array[46] = '142';
$test_array[47] = '143';
$test_array[48] = '144';
$test_array[49] = '145';
$test_array[50] = '146';
$test_array[51] = '147';
$test_array[52] = '148';
$test_array[53] = '149';
$test_array[54] = '15';
$test_array[55] = '151';
$test_array[56] = '152';
$test_array[57] = '153';
$test_array[58] = '154';
$test_array[59] = '155';
$test_array[60] = '156-A';
$test_array[61] = '158';
$test_array[62] = '159';
$test_array[63] = '16';
$test_array[64] = '160';

natsort($test_array);

echo '<pre>';
print_r($test_array);
echo '</pre>';

输出结果为:

Array
(
    [0] => 1
    [1] => 10
    [20] => 12
    [21] => 12-A
    [42] => 14-A
    [43] => 14-B
    [54] => 15
    [63] => 16
    [2] => 100
    [3] => 101
    [4] => 103
    [5] => 104
    [6] => 105
    [7] => 106
    [8] => 107-B
    [9] => 108
    [10] => 110
    [11] => 111
    [12] => 112
    [13] => 113
    [14] => 114
    [15] => 115
    [16] => 116
    [17] => 117
    [18] => 118
    [19] => 119
    [22] => 120
    [23] => 121
    [24] => 122
    [25] => 123
    [26] => 124
    [27] => 125
    [28] => 126
    [29] => 127
    [30] => 128
    [31] => 129
    [32] => 130
    [33] => 131
    [34] => 132
    [35] => 133
    [36] => 134
    [37] => 135
    [38] => 136
    [39] => 137
    [40] => 138
    [41] => 139
    [44] => 140
    [45] => 141
    [46] => 142
    [47] => 143
    [48] => 144
    [49] => 145
    [50] => 146
    [51] => 147
    [52] => 148
    [53] => 149
    [55] => 151
    [56] => 152
    [57] => 153
    [58] => 154
    [59] => 155
    [60] => 156-A
    [61] => 158
    [62] => 159
    [64] => 160
)