我试图通过其中一个值的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];
});
答案 0 :(得分:2)
您可以尝试在比较功能中使用strcmp
,而不是减去:
return strcmp(explode('.', $a['name'])[1], explode('.', $b['name'])[1]);
当你减去时,字母将被转换为整数0.使用strcmp
的比较将区分大小写,但是根据你的例子中的数据看起来应该没问题。