2011-11-28 121 views
7

我知道php中有natsort()和natcasesort()函数来按自然顺序对数组元素进行排序。我正在尝试对以下内容进行排序。按字母顺序对php数组进行排序

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'; 

我使用了自定义算法中,但它不一样的...这是之前‘1A地方'10 ......’。我的继承人自定义功能:

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; 
} 
+0

只有usort ..... – idm

+0

正如其他已经公布,'natsort()'为我工作。你使用的是什么版本的PHP? – Hammerite

回答

5

使用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); 
0

使用usort用自己的自定义算法

+0

natsort()为它提供算法。 – pltvs

1

natsort工作正常,我...

否则使用str_pad在排序数组之前格式化数字。

或者你可以将用户usort使用自定义功能,可能与INTVAL ...