php内核函数natsort浅析
来源:互联网 发布:32位64位系统区别 知乎 编辑:程序博客网 时间:2024/05/16 09:11
今天发现了php有个自然排序的函数----natsort,第一次听说了原来还有一种叫做“自然排序”的算法,很好奇,官方手册(http://us.php.net/manual/en/function.natsort.php)
据官方手册还可以得到这样的结果:
img1.png img2.png img10.png img12.png
显然这很适合对类似文件名的排序。从结果看这种自然算法应该是去掉头和尾的非数字部分,然后对留下来的数字部分进行排序,究竟是不是,还是看一下php源码吧。
虽然是第一次查看php的内核代码,不过凭借多年看代码的经验,还是很容易找到这个自然排序算法的核心就是函数:strnatcmp_ex(位于ext/standard/strnatcmp.c文件中)。
从strnatcmp_ex函数中的:
所以,我觉得应该字符串(当前位置开始)中前面的空字符和数字前面的‘0’不会参与比较,比较的结果应该和
http://us.php.net/manual/en/function.natsort.php
http://sourcefrog.net/projects/natsort/example-out.txt
所说的一样,但是在我的php5.2.9中对于“0”的处理结果却不一样(例如“img002.png”与“img1.png”,我的理解应该是前者大于后者,不过在我的5.2.9中却是前者小于后者),原因还没想清楚,可能是5.2.9的一个bug,也可能是自己还没有理解清楚源码的意思。下次配置好环境再好好测试,好好消化~~
在array.c中有两个重要的数据结构很值得我们关注:
Bucket: http://www.phpchina.cn/bbs/viewthread.php?tid=88505
zval: http://www.laruence.com/2008/08/22/412.html
- php内核函数natsort浅析
- 浅析 php each 函数
- PHP natsort 用“自然排序”算法对数组排序
- 内核 do_fork 函数源代码浅析
- PHP内核浅析-1.整体概念
- PHP--URL编码函数浅析
- Linux内核 do_fork 函数源代码浅析
- linux内核 do_fork 函数源代码浅析
- Linux 内核信号量(semaphore) __down() 函数浅析
- PHP内核探索:zend_parse_parameters函数
- PHP内核探索:zend_parse_parameters函数
- PHP内核探索笔记-函数
- 浅析php中的substr_count()函数的使用
- php的urlencode()URL编码函数浅析
- php的urlencode()URL编码函数浅析
- php的urlencode()URL编码函数浅析
- PHP函数strip_tags的一个bug浅析
- php的header()函数浅析
- Authentication vs. Authorization 验证与授权[整理]
- JBPM整合SSH常常老是出现的异常
- VIJOS不打算上了!试用了一下VS 2010,还行.
- centos安装教程
- GridView~~
- php内核函数natsort浅析
- Weblogic Server性能调优建议
- 兼容Oracle和MSSQL的Hibernate配置
- 完美代替IIS的网络盒子NetBox
- 两年多了
- 函数与事件吧,未整理
- 双网卡内外网同时使用的方法
- 软件项目开发流程图
- 电梯里被按得最多的键