• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

字符串的自然排序有关问题

php 搞代码 3年前 (2022-01-23) 22次浏览 已收录 0个评论

字符串的自然排序问题
1、
$(本文来)源gaodaimacom搞#^代%!码&网(

搞gaodaima代码

a = ‘x2-g8’;
$b = ‘x2-y7’;
echo strnatcasecmp($a, $b); //输出-1
———————————————
2、
$a = ‘a10a’;
$b = ‘a010’;
echo strnatcasecmp($a, $b); //输出1
———————————————
3、
$a = ’10a’;
$b = ‘10.0a’;
echo strnatcasecmp($a, $b); //输出1
———————————————

问题:
1、手册中写的是:
Strings can contain several number parts: x2-g8 < x2-y7 < x2-y08 < x8-y8
in which case numeric fields are separated by nonnumeric characters. Leading spaces are ignored.
这意思不就是说可以忽略前导位置吗?那$a和$b不就是28,27吗?
2、$a和$b不都是10吗?为什么会被认为不同呢?
3、我还是认为$a和$b都是10啊~

看了一遍手册中的“字符串自然排序”规则,但是没太看懂,能帮我讲一下字符串自然排序的规则有哪些吗?
另外字符串自然排序和数组用的自然排序(natcasesort())是一个规则吗?

谢谢!

——解决方案——————–
没用过!你可以用数组排序,那就是自然排序!

一般是根据拉字字母排序!

中文,可以转成gbk然后排序。转成相应的语言码后, 应可以直接比较大小。
大小写字母是不同的。

——解决方案——————–

#1.字符串首位为0将被忽略,所以你看下面两个例子是不同的的结果

echo strnatcasecmp(‘7′,’08’); //-1
echo strnatcasecmp(‘y7′,’y08’); //1

#2.字符串内的空格将被忽略

#3.如果是非数字对上数字,或者非数字对非数字,则以ascii码为准,如果是数字对数字,有两种情况
a).任意一方数字串以0开头被视为小的一方,比如
echo strnatcasecmp(‘y721′,’y07203’); //1,因为y=y,7 > 0
b).如果都非0,则数字小的一方为小的一方,比如
echo strnatcasecmp(‘y723′,’y70212’); //1,因为y=y,70212 > 723

可以阅读源代码,这部分很容易看懂。
——解决方案——————–
echo strnatcasecmp(‘7′,’08’); //-1
echo strnatcasecmp(‘y7′,’y08’); //1

-11

$a = ‘x2-g8’;
$b = ‘x2-y7’;
echo strnatcasecmp($a, $b); //输出-1
———————————————
2、
$a = ‘a10a’;
$b = ‘a010’;
echo strnatcasecmp($a, $b); //输出1
———————————————
3、
$a = ’10a’;
$b = ‘10.0a’;
echo strnatcasecmp($a, $b); //输出1

-111

有什么不对的吗?
字符串比较时时按字节比较,直至对应位不等时,比较相应两字符

如果说明文字与此解释不符,请注意一个事实:老外不是上帝
如果只是理解上的差异,请去打你英语老师的屁股


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:字符串的自然排序有关问题

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址