【问题标题】:sort multidimesional array in php [duplicate]在php中对多维数组进行排序[重复]
【发布时间】:2012-10-26 13:51:32
【问题描述】:

可能重复:
PHP - Multiple uasort functions breaks sorting

我在 php 中有 3 列的多维数组。我需要按“awarded_units”对其进行排序,如果两个用户有相同的奖励_units(tiebreaker),那么选择最少的一个将首先出现。

user_id awarded_units selected_units

15       5               2
22       5               1
3        4               2
4        4               5
5        4               1

如您所见,我已经使用了一些多维排序函数,基于award_units 对数组进行了排序。现在,我需要解决决胜局条件。由于 user_id=15 和 user_id=22 有相同的奖励单位,所以 user_id 22 必须排在第一位。

正确的顺序是

user_id awarded_units selected_units

22       5               1
15       5               2
5        4               1
3        4               2
4        4               5

请告诉我该怎么做。谢谢

【问题讨论】:

  • 在发帖之前,您是否查看过数组排序? php.net/manual/en/array.sorting.php
  • PS:您是自己创建阵列还是从数据库接收阵列?
  • 特别是请参阅 PHP 手册中的 Example #3 Sorting database results 以获取 array_multisort 条目 - 如果您需要在 PHP 中解决该问题。你还没有发布你的数组,所以这可能会略有不同。
  • 我曾为此尝试过 usort,但无法做到。
  • @PriteshGupta:嗯,有多个副本。邀请您进行搜索。你甚至可以尝试和错误如此多的重复项。这甚至可以通过不了解任何一行 PHP 来实现。提示:在数据库中排序,速度更快,根本不需要任何PHP代码。

标签: php sorting multidimensional-array


【解决方案1】:

你可以使用array_multisort:

$cols = array();
foreach ($multiArray as $key => $value) 
{
    $cols['awarded_units'][$key]  = $value['awarded_units'];
    $cols['selected_units'][$key] = $value['selected_units'];
}
array_multisort($cols['awarded_units'], SORT_DESC, $cols['selected_units'], SORT_ASC, $multiArray);

【讨论】:

  • 第一个代码示例更好。现在你改变了它。
  • 以为我读错了问题,改回来了。
【解决方案2】:

使用custom sort function with usort

usort($data, function($a, $b) {
    if ($a['awarded_units'] == $b['awarded_units'])
    {
        return $b['selected_units'] - $a['selected_units'];
    }

    return $b['awarded_units'] - $a['awarded_units'];
});

您也可以为此使用array_multisort,但我更喜欢使用 usort - 更大的灵活性和更好的可读性。

【讨论】:

  • 但另一方面,usort 很复杂,因为您需要编写代码进行比较。这通常会发生错误 - 您的回答也是一个很好的例子。
猜你喜欢
  • 2012-04-23
  • 2019-07-05
  • 2010-09-10
  • 1970-01-01
  • 2013-04-26
  • 2012-07-18
相关资源
最近更新 更多