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

问题描述
对数组进行排序,先对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']){
return1;
}elseif($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数组进行了修改如果有大神知道的,还望不吝赐教!**
大话西游666
浏览 532回答 2
2回答

海绵宝宝撒

if($b['a']==0){return-1;}你这个if是多余的吧,两个if比较结果会产生冲突,所以在排序中可能产生不稳定的结果。我把你代码改了下
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript