首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场

降降
EN

Stack Overflow用户
提问于 2013-01-26 06:57:19
回答 5查看 52.2K关注 0票数 27

当我尝试应用下面的代码from here

代码语言:javascript
运行
复制
usort($myArray, function($a, $b) {
    return $a['order'] - $b['order'];
});

它给了我升序的结果。

输出

代码语言:javascript
运行
复制
0
0
0
0
0
0.29
1.09
6.33

在交换$a和$b时,它给出了除一个值之外的降序结果。

代码语言:javascript
运行
复制
usort($myArray, function($a, $b) {
    return $b['order'] - $a['order'];
});

输出

代码语言:javascript
运行
复制
6.33
1.09
0
0
0
0
0.29
0

我想按以下顺序得出结果:

代码语言:javascript
运行
复制
6.33
1.09
0.29
0
0
0
0
0

我如何实现同样的目标?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-01-26 07:05:17

我的第一个猜测是usort期望一个整数响应,如果返回值不是整数,它将舍入返回值。在0.29的情况下,当它与0进行比较时,结果是0.29 (或-0.29),它的整数为0。对于usort,0表示这两个值相等。

试着做这样的事情:

代码语言:javascript
运行
复制
usort($myArray, function($a, $b) {
    if($a['order']==$b['order']) return 0;
    return $a['order'] < $b['order']?1:-1;
});

(我认为这是正确的方向。若要扭转顺序,请将<更改为>)

票数 41
EN

Stack Overflow用户

发布于 2014-10-14 20:51:10

只需按以下方式切换$a和$b;

代码语言:javascript
运行
复制
function sort($a, $b){ 
return strcasecmp($b->order, $a->order);
}
usort($myArray, "sort");
票数 13
EN

Stack Overflow用户

发布于 2019-12-03 11:57:01

在php 7(及以上)中使用太空船操作符:

代码语言:javascript
运行
复制
usort($myArray, function($a, $b) {
    return $a['order'] <=> $b['order'];
});

将返回按升序排序的数组。反向比较将返回降序。

代码语言:javascript
运行
复制
usort($myArray, function($a, $b) {
    return $b['order'] <=> $a['order'];
});
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14534672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档