我知道php中有natsort()和natcasesort()函数以自然顺序对数组元素进行排序。我正试着对下列项目进行排序。
array[0]= '10. xyz';
array[1]= '13. xyz';
array[2]= '2. xyz';
array[3]= '1a. xyz';
array[4]= '6. xyz';
array[5]= '1b. xyz';
array[6]= '4a. xyz';
array[7]= '4b. xyz';
现在如果我应用natsort(), '10…和"13.."’放在‘1a..’的上方。我怎么能让我的php代码认为'10..大于1a…和"1a……"应该排在最前面吗?在我的特殊情况下,正确的输出是:
'1a. xyz';
'1b. xyz';
'2. xyz';
'4a. xyz';
'4b. xyz';
'6. xyz';
'10. xyz';
'13. xyz';
我使用自定义算法,但它做相同的…它的位置是10…在"1a…"之前。这是我的自定义函数:
function cmp($a, $b) {
$a_ex=explode(".",$a);
$b_ex=explode(".",$b);
if ($a_ex[0] == $b_ex[0] ) {
return 0;
}
return ($a_ex[0] < $b_ex[0]) ? -1 : 1;
}
使用natsort():
$array[0]= '10. xyz';
$array[1]= '13. xyz';
$array[2]= '2. xyz';
$array[3]= '1a. xyz';
$array[4]= '6. xyz';
$array[5]= '1b. xyz';
$array[6]= '4a. xyz';
$array[7]= '4b. xyz';
natsort($array);
print_r($array);
natsort适合我…
否则,在对数组排序之前使用str_pad对数字进行格式化。
或者您可以使用自定义函数使用ussort,例如使用interval…
使用自定义算法使用ussort