为了账号安全,请及时绑定邮箱和手机立即绑定

php usort排序在php7.2和5.6版本中结果不一样各位有什么建议?

php usort排序在php7.2和5.6版本中结果不一样各位有什么建议?

大话西游666 2019-08-21 11:58:34
问题描述对数组进行排序,先对a字段正序排序,但0排到最后,再对b字段逆序排序实现代码//对数组进行排序,先对a字段正序排序,但0排到最后,再对b字段逆序排序$a1=array(array('a'=>1,'b'=>1),array('a'=>2,'b'=>1),array('a'=>1,'b'=>2),array('a'=>0,'b'=>1),array('a'=>1,'b'=>3),array('a'=>2,'b'=>2),array('a'=>0,'b'=>2),array('a'=>2,'b'=>3));//对a排序functionmy_sort1($a,$b){if($a['a']==0){return1;}if($b['a']==0){return-1;}if($a['a']>$b['a']){return1;}return-1;}//对b排序functionmy_sort2($a,$b){if($a['a']==$b['a']){if($a['b']$b['b']){return-1;}}return0;}usort($a1,"my_sort1");usort2($a1,"my_sort2");返回结果php7.2返回结果正常Array([0]=>Array([a]=>1[b]=>3)[1]=>Array([a]=>1[b]=>2)[2]=>Array([a]=>1[b]=>1)[3]=>Array([a]=>2[b]=>3)[4]=>Array([a]=>2[b]=>2)[5]=>Array([a]=>2[b]=>1)[6]=>Array([a]=>0[b]=>2)[7]=>Array([a]=>0[b]=>1))php5.6返回结果有问题Array([0]=>Array([a]=>0[b]=>2)[1]=>Array([a]=>0[b]=>1)[2]=>Array([a]=>2[b]=>3)[3]=>Array([a]=>2[b]=>2)[4]=>Array([a]=>2[b]=>1)[5]=>Array([a]=>1[b]=>3)[6]=>Array([a]=>1[b]=>2)[7]=>Array([a]=>1[b]=>1))思考**查阅了相关信息,函数php7并没有修改usort方法疑问:是否php7版本对php数组进行了修改如果有大神知道的,还望不吝赐教!**
查看完整描述

2 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

if($b['a']==0){
return-1;
}
你这个if是多余的吧,两个if比较结果会产生冲突,所以在排序中可能产生不稳定的结果。
我把你代码改了下
//对数组进行排序,先对a字段正序排序,但0排到最后,再对b字段逆序排序
$a1=array(
array('a'=>1,'b'=>1),
array('a'=>2,'b'=>1),
array('a'=>1,'b'=>2),
array('a'=>0,'b'=>1),
array('a'=>1,'b'=>3),
array('a'=>2,'b'=>2),
array('a'=>0,'b'=>2),
array('a'=>2,'b'=>3)
);
//对a排序
$count=0;
functionmy_sort1($a,$b){
global$count;
$count++;
if($a['a']==0){
return1;
}
/*if($b['a']==0){
return-1;
}*/
if($a['a']>$b['a']){
return1;
}
return-1;
}
//对b排序
functionmy_sort2($a,$b){
if($a['a']==$b['a']){
if($a['b']<$b['b']){
return1;
}elseif($a['b']>$b['b']){
return-1;
}
}
return0;
}
usort($a1,"my_sort1");
usort($a1,"my_sort2");
echo'Comparetimes:'.$count,"\n";
var_export($a1);
php7.2没注释第二个if的情况下,比较了15次,注释了的情况下比较了14次php5.6没注释19次,注释了16次
                            
查看完整回答
反对 回复 2019-08-21
  • 2 回答
  • 0 关注
  • 531 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号