【问题标题】:Sorting an array of arrays by specific index descending [duplicate]按特定索引降序对数组进行排序[重复]
【发布时间】:2018-05-26 16:12:29
【问题描述】:

我有下面的数组

Array
(
  [Prod1] => Array
    (
        [0] => $1,167,788.03
        [1] => 26,872
        [2] => 73.42
        [3] => 19.0%
        [4] => $1,134,106.83
        [5] => $1,681,843.02
        [6] => $3,098.65
        [7] => $42.20
        [8] => $-19.55
        [9] => $-9.60
        [10] => $43.46
        [11] => 0.97
    )

[Prod2] => Array
    (
        [0] => $6,730.84
        [1] => 161
        [2] => 0.44
        [3] => 13.7%
        [4] => $4,783.41
        [5] => $6,755.61
        [6] => $13.07
        [7] => $29.71
        [8] => $-27.30
        [9] => $-21.50
        [10] => $41.81
        [11] => 0.71
    )

[Prod3] => Array
    (
        [0] => $2,498,984.47
        [1] => 30,409
        [2] => 83.08
        [3] => 21.5%
        [4] => $3,026,866.16
        [5] => $3,850,645.25
        [6] => $8,270.13
        [7] => $99.54
        [8] => $-21.33
        [9] => $-8.19
        [10] => $82.18
        [11] => 1.21
    )
}

我正在尝试根据索引 [0] 按降序对其进行排序,并尝试使用不同的 PHP 内置函数,但我没有成功。

基本上,所需的结果将按以下顺序 Prod3、Prod1、Prod2。

解决这个问题的最佳方法是什么?

谢谢

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    我不知道usort 是否是最好的方法,但用户功能相当简单:

    usort($array, function ($a, $b) {
     $x = (int)str_replace(['$',',','.'],'',$a[0];
     $y = (int)str_replace(['$',',','.'],'',$b[0];
     if ($x === $y) return 0;
     return ($x < $y) ? 1 : -1;
    });
    

    编辑:我第一次错过了值的格式。如果没有 Mohamad Attat 的回答,我不会找到它。如果您的美元金额总是有两位小数,则 str_replace 调用应该可以解决它。

    【讨论】:

      【解决方案2】:

      假设 $arr 是您在上面显示的数组,下面的代码应该适用于您的情况

      $tmp_arr = array();
      $sorted_arr = array();
      foreach ($arr as $key => $val_array) {
          //removing $ and ,
          $first_index_without_dollar = str_replace(array("$", ","), array("", ""), $val_array[0]);
          //getting string as number in order to sort
          $first_index_without_dollar = number_format((float) $first_index_without_dollar, 2, '.', '');
          $tmp_arr[$first_index_without_dollar] = $key;
      }
      //sorting by key descending
      krsort($tmp_arr);
      
      foreach ($tmp_arr as $val) {
          $sorted_arr[$val] = $arr[$val];
      }
      

      【讨论】:

      • 感谢您提供这么优雅的代码!
      猜你喜欢
      • 2011-11-16
      • 2013-03-06
      • 2020-03-06
      • 1970-01-01
      • 2018-09-22
      • 2014-02-16
      • 1970-01-01
      • 2020-07-18
      相关资源
      最近更新 更多