问题描述对数组进行排序,先对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次
添加回答
举报
0/150
提交
取消