2011-11-28 258 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 ...