【问题标题】:Sort array object if two key's value number are equal then match to another key value pair如果两个键的值编号相等,则对数组对象进行排序,然后匹配到另一个键值对
【发布时间】:2020-11-22 12:13:19
【问题描述】:

我想对 php 对象数组进行排序,在排序时我必须考虑两个不同的键,如果两个用户的值相同,则考虑这些值的另一个键。

给定数组示例

[{'id':'1','total_number':'90','previous_number':'75'},
 {'id':'2','total_number':'80','previous_number':'91'},
 {'id':'3','total_number':'80','previous_number':'84'},
 {'id':'4','total_number':'80','previous_number':'96'},
 {'id':'5','total_number':'95','previous_number':'80'}
]

结果数组:

[{'id':'5','total_number':'95','previous_number':'80'}, 
 {'id':'1','total_number':'90','previous_number':'75'},
 {'id':'4','total_number':'80','previous_number':'96'},
 {'id':'2','total_number':'80','previous_number':'91'},
 {'id':'3','total_number':'80','previous_number':'84'} 
]

【问题讨论】:

  • 修改结果如果我必须在同一个数组中添加排名,那么我该如何添加。如果两个用户的总数相同,那么排名也应该相同。你能提出一些逻辑吗?或编写一组代码。 – expected result - [{'id':'5','total_number':'95','previous_number':'80,'rank':'1''}, {'id':'1','total_number':'90','previous_number':'75','rank':'2'}, {'id':'4','total_number':'80','previous_number':'96','rank':'3'}, {'id':'2','total_number':'80','previous_number':'91','rank':'3'}, {'id':'3','total_number':'80','previous_number':'84','rank':'3'} ]

标签: php arrays sorting quicksort ranking


【解决方案1】:

您可以使用自定义排序函数,借助 PHP 中的 usort 函数 https://www.php.net/manual/en/function.usort.php 来实现所需的结果

// custom sort function
function mySort($a, $b) {
  // is total_number same?
  if ($a->total_number === $b->total_number) {
    // use previous_number to sort
    if ($a->previous_number === $b->previous_number) {
      return 0;
    }
    // sort desc
    return $a->previous_number > $b->previous_number ? -1 : 1;
  }
  // sort desc
  return $a->total_number > $b->total_number ? -1 : 1;
}


// call the function
usort($array, 'mySort');

【讨论】:

  • @gilan 感谢您的回答。如果我必须在同一个数组中添加排名,那么我该如何添加。如果两个用户的总数相同,那么排名也应该相同。你能提出一些逻辑吗?或编写一组代码。
  • 修改结果如果我必须在同一个数组中添加排名,那么我该如何添加。如果两个用户的总数相同,那么排名也应该相同。你能提出一些逻辑吗?或编写一组代码。 - 预期结果 - [{'id':'5','total_number':'95','previous_number':'80,'rank':'1''}, {'id':'1','total_number':'90','previous_number':'75','rank':'2'}, {'id':'4','total_number':'80','previous_number':'96','rank':'3'}, {'id':'2','total_number':'80','previous_number':'91','rank':'3'}, {'id':'3','total_number':'80','previous_number':'84','rank':'3'} ]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-02
  • 1970-01-01
  • 2018-09-06
  • 2020-12-20
  • 1970-01-01
相关资源
最近更新 更多