设为首页 收藏本站
查看: 465|回复: 0

[经验分享] php usort

[复制链接]

尚未签到

发表于 2017-3-3 12:37:41 | 显示全部楼层 |阅读模式
这个函数很倒霉,不容易控制

手册上确实是举例说明usort了,但是只是说,callback $cmp_function 返回值小于、等于、大于,表示第一个参数比第二个小、等、大。
可是在实践中,使用float比较、string直接比较,都会导致usort的行为不正常,就是无法正确的排序,
即使是使用float值比较,然后返回1,-1,0,都是不可以的,所以只能先把float转成int来比较
真是不知道如果我的float不是全部round 2的话,我怎么转化成int,只能自己写个冒泡了。。。





??? public static function tksort(&$arr, $strColumnName, $strOrder = 'ASC') {
??????? usort($arr, array(new TKSorter($strColumnName, $strOrder), "compare"));
??? }

/**
?* The class for sorting by some int columns.
?*
?*/
class TKSorter {
??? private $_cname;
??? private $_order = 'ASC';
??? // see http://80x86.cn/article.asp?id=1761
??? private $_multi = 100; // round is (, 2), so we just multiply 100 here
??? public function __construct($strColumnName, $strOrder = 'ASC', $intMulti = 100) {
??????? $this->_cname = $strColumnName;
??????? $this->_order = $strOrder;
??????? $this->_multi = $intMulti;
??? }
??? public function compare($a, $b) {
??????? if (is_numeric($a[$this->_cname]) && is_numeric($b[$this->_cname])) { // both are numbers
??????????? $dblM = (int)($a[$this->_cname] * $this->_multi) - (int)($b[$this->_cname] * $this->_multi);
??????????? if ($this->_order == 'ASC') {
??????????????? return $dblM;
??????????? } else {
??????????????? return 0 - $dblM;
??????????? }
??????? } else {
??????????? // 强行转化!
??????????? $va = (int)(((double)$a[$this->_cname]) * $this->_multi);
??????????? $vb = (int)(((double)$b[$this->_cname]) * $this->_multi);
??????????? $dblM = $va - $vb;
??????????? if ($this->_order == 'ASC') {
??????????????? return $dblM;
??????????? } else {
??????????????? return 0 - $dblM;
??????????? }
??????? }
??? }
}
?

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-349781-1-1.html 上篇帖子: php试题 下篇帖子: php webservice
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表