【问题标题】:sort by multiple conditions using uasort() php使用 uasort() php 按多个条件排序
【发布时间】:2020-03-12 05:44:43
【问题描述】:

我有一组 json 对象,我想对其进行升序排序,并将空值放在最后。以下是我尝试过的代码。两个 uasort() 单独工作都非常好,但是当我一个接一个地放置它们时,它只是根据最新的函数对数组进行排序。

如何按升序对数组进行排序,并将空值放在升序排序列表的末尾?


uasort($arr, function($a,$b) { 
        return $a->score > $b->score ? 1 : -1; 
    });

uasort($arr, function($a) {
     return ( is_null($a->score==NULL) OR $a->score == "") ? 1 : -1;
});

【问题讨论】:

  • is_null($a->score==NULL) 应该只是 is_null($a->score)
  • 只有一个功能,如果主要条件相同,则对第二个条件进行排序(更多排序条件相同的过程)

标签: php sorting


【解决方案1】:

使用一个测试两种条件的比较函数。

uasort($arr, function($a, $b) {
    if ($a->score === $b->score) {
        return 0;
    }
    if ($a->score === NULL || $a->score === "") {
        return 1;
    }
    if ($b->score === NULL || $b->score === "") {
        return -1;
    }
    return $a->score > $b->score ? 1 : -1; 
}

【讨论】:

  • 这段代码把空值放在最上面,我想把空值放在列表的底部。
  • 然后交换-11
  • 将 -1 换成 1 将分数按降序排列。我想按升序得分并将 null 放在底部。
  • 我的意思是在检查NULL 的部分中交换它们。我在发表评论时进行了更改。
  • 是的,我也这样做了,但 null 仍然在顶部。
猜你喜欢
  • 2021-04-30
  • 2013-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多