如何解决php高级按数字先排序,然后按字母顺序排序
我有一个元素数组,我想先按数字排序,然后再按字母排序: 从下面的图像中可以看到,一些字符串包含数字值(例如12英寸,10英寸等)。 我想要的是:6英寸,8英寸,9英寸,10英寸,12英寸,运动……西方。
当前的usort算法如下:
usort($facets['style'],function ($a,$b) {
return (intval($a['value']) < intval($b['value'])) ? 1 : strcmp($a['value'],$b['value']);
});
谢谢!
解决方法
使用natsort():
查看其工作原理:
// input
$array = [
'8 Inch','6 Inch','12 Inch','10 Inch','Athletic','Western','9 Inch'
];
natsort($array);
// output
Array
(
[1] => 6 Inch
[0] => 8 Inch
[6] => 9 Inch
[3] => 10 Inch
[2] => 12 Inch
[4] => Athletic
[5] => Western
)
请参见Demo
,$a = [
'a','12 inch','10 inch','5 inch','z','b'
];
$b = $a;
// way 1 (keys are lost)
usort($a,function ($a,$b) {
return (strnatcmp($a,$b));
});
print_r($a);
// way 2 (keys are preserved)
natsort($b);
print_r($b);
结果:
Array
(
[0] => 5 inch
[1] => 10 inch
[2] => 12 inch
[3] => a
[4] => b
[5] => z
)
Array
(
[3] => 5 inch
[2] => 10 inch
[1] => 12 inch
[0] => a
[5] => b
[4] => z
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。