与
ESC
输入关键词搜索文章

解决PHP和Java的sort排序一致

全文约 469 字预计阅读 2 分钟
php排序sort($tmpArr, SORT_STRING)方式就会和java的Arrays.sort()结果一致了。 在把一段Java代码转php的时候发现使用默认sort这个函数会出行排序不一致情况,经查询需要修改第二个参数为字符串。 php默认的排序参数信息 sort(array &$array, int $flags = SORT_REGULAR): true 可选的第二个参数 flags 可以用以下值改变排序的行为: 排序类型标记: SORT_REGULAR - 正常比较单元 详细描述参见 比较运算符 章节 SORT_NUMERIC - 单元被作为数字来比较 SORT_STRING - 单元被作为字符串来比较 SORT_LOCALE_STRING - 根据当前的区域(locale)设置来把单元当作字符串比较,可以用 setlocale() 来改变。 SORT_NATURAL - 和 natsort() 类似对每个单元以“自然的顺序”对字符串进行排序。 SORT_FLAG_CASE - 能够与 SORT_STRING 或 SORT_NATURAL 合并(OR 位运算),不区分大小写排序字符串。 SORT_STRING 排序方式的底层实现是 C 语言的 memcmp,它对两个字符串从前往后,按照逐个字节比较,一旦字节有差异,就终止并比较出大小。 而 SORT_REGULAR 会智能判断需排序对象的类型,如果两个字符串都是“纯数字”形式的字符串,会以比较整个字符串所代表的十进制整数、浮点数大小的形式进行排序。如果两个字符串不是“纯数字“形式的,才会和 SORT_STRING 一样。 因此,如果需要以字符串 strcmp 方式逐个字节从前往后比较来进行排序,在调用 php 的 sort 类函数的时候请务必使用 SORT_STRING 这个 flag,否则如果两个字符串都是”纯数字“形式的,就会按照它们所代表的数字大小进行排序。
解决PHP和Java的sort排序一致
分享

发表评论

评论 0 条

暂无评论,来说点什么吧。