PHP并防止uasort函数在值相等时进行排序

时间:2017-07-11 21:33:32

标签: php arrays sorting

我正在使用PHP的uasort函数的数组。如果是$a[0]['date'] == $b[0]['date'],那么我不想排序。

无论如何,我的代码无论如何都会排序。我怎么能阻止它这样做呢?

这是我的阵列:

这是阵列:

Array (
  [2764] => Array (
    [status] => 0

    [0] => Array (
      [date] => 2000-01-01
    )

    [1] => Array (
      [date] => 2016-01-16
    )
  )

  [5974] => Array (
    [status] => 0

    [0] => Array (
      [date] => 2000-01-01
    )

    [1] => Array (
      [date] => 2010-12-13
    )
  )
)

以下是我试图排序的方式:

uasort($arr, function($a, $b)
{
  if ($a['status'] == $b['status'])
  {
    if ($a[0]['date'] == $b[0]['date'])
    {
      return 0; # I do not want to sort here, but this will sort anyway - why is that so?
    }
    else
    {
      return strcmp($a[0]['date'], $b[0]['date']);
    }
  }
  else
  {
    return $b['status'] - $a['status'];
  }
});

如果日期相同,我如何按索引排序?我的意思是按索引2764和5974排序。

1 个答案:

答案 0 :(得分:2)

documentation中一样:

If two members compare as equal, their relative order in the sorted array is undefined.

因此,您必须引入额外的值,例如original_order并按等号排序。

相关问题