PHP按字母数字子字符串值排序多维数组

时间:2016-05-04 21:27:12

标签: php arrays sorting

我试图通过其中一个值的part(substring)对数组进行排序。显示的大多数示例只是按值排序。

我需要按名称的最后部分排序,所以'4 / 01.02'将是'02'。 '01'将被排序为'02'等等。

我设法通过在值检查中添加爆炸来实现此功能,但它没有按正确顺序对数字和字母进行排序。

这些数字似乎是正确的,但当它击中字母时它会按奇数顺序排列。

  • 如何根据需要对结束信件进行排序?
  • 如何在数字后面移动以字母开头的值?

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

希望: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];
});

1 个答案:

答案 0 :(得分:2)

您可以尝试在比较功能中使用strcmp,而不是减去:

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

当你减去时,字母将被转换为整数0.使用strcmp的比较将区分大小写,但是根据你的例子中的数据看起来应该没问题。