【问题标题】:Stable uasort - why is the order being reversed?稳定的 uasort - 为什么顺序被颠倒?
【发布时间】:2016-02-04 14:59:12
【问题描述】:

我正在使用 uasort 对如下所示的数组进行排序:

Array
(
  [2] => 0
  [3] => 0
  [4] => 0
)

我正在尝试按值排序,保持键关联。另外,如果值相同,我需要保持原始顺序。

所以我正在做以下事情:

uasort($arr, array($this, 'mysort'));

function mysort($a, $b){
  if($a == $b){
    return 0;
  }
  return ($a < $b) ? -1:1;
}

但是,这给出了结果数组:

Array
(
  [4] => 0
  [3] => 0
  [2] => 0
)

为什么数组被有效地反转了?

【问题讨论】:

  • PHP 5.x here 和these are the values 当PHP 5.x 和7 的元素相等时返回。我添加了一个函数来检查版本并相应地返回正确的整数。否则,如果您的代码必须在两个版本上运行,那么您就搞砸了。 Tests running on 5+7

标签: php arrays sorting


【解决方案1】:

uasort 不是稳定的排序,也就是说,它不保持相等值的顺序。

manual 的注释部分包含一个 stable_uasort

【讨论】:

  • 感谢您为我阅读手册!假设它是针对多维数组的,我已经略过了那条评论。 (并且当值相同时,我的 return 0 将保持订单不变。)
  • PHP 手册的文档记录很差,缺少许多极端情况和细节,值得检查该部分 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-10
  • 2011-07-11
  • 2013-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多