2016-05-04 128 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的比较将区分大小写,但从您的示例中的数据看起来应该没问题。