2016-05-04 184 views
0

我試圖通過其中一個值的部分(子串)對數組進行排序。顯示的大部分示例只是按價值排序。PHP按字母數字子串值排序多維數組值

我需要按名稱的最後部分進行排序,所以'4/01.02'就是'02'。 '01'將被排序gainst'02'等。

我設法通過在值檢查中添加爆炸,但它不按正確的順序排序數字和字母。

這些數字似乎是正確的,但是當它打到字母時,它按奇數順序排列。

  • 我怎樣才能得到結束字母按需要排序?
  • 如何在數字後移動以字母開頭的值?

結果:LG1, 01, 02C, 02B, 02D, 02A, 03...

DESIRED:01, 02A, 02B, 02C, 02D, 03, LG1...

示例陣列

Array 
(
    [0] => Array 
    (
     [room_id] => 4-01-1 
     [name] => 4/01.02A 
     [type] => office 
    ) 

    [1] => Array 
    (
     [room_id] => 4-01-2 
     [name] => 4/01.01 
     [type] => office 
    ) 
    [2] => Array 
    (
     [room_id] => 4-01-3 
     [name] => 4/01.03 
     [type] => office 
    ) 
    [3] => Array 
    (
     [room_id] => 4-01-4 
     [name] => 4/01.02B 
     [type] => office 
    ) 
); 

PHP

uasort($rooms, function($a, $b) 
{ 
    return explode('.', $a['name'])[1] - explode('.', $b['name'])[1]; 
}); 

回答

2

您可以嘗試在你的比較函數使用strcmp而不是減去:

return strcmp(explode('.', $a['name'])[1], explode('.', $b['name'])[1]); 

當您減去時,這些字母將被轉換爲整數0.使用strcmp的比較將區分大小寫,但從您的示例中的數據看起來應該沒問題。