【问题标题】:second sorting with php usort使用 php usort 进行第二次排序
【发布时间】:2010-05-20 16:03:14
【问题描述】:

所以我有一个相当大的数据数组,需要按两个标准对它们进行排序。

有变量$data['important']$data['basic']

它们是简单的数字,我使用 uasort 进行排序 $data 先按重要后按基本。

所以

Important | Basic
10        | 8
9         | 9
9         | 7
7         | 9

usort函数很简单

public function sort_by_important($a, $b) {

        if ($a[important] > $b[important]) {
            return -1;
        } 
        elseif ($b[important] > $a[important]) {
            return 1;
        } 
        else {
            return 0;
        }
    }

如何将数组重新排序到第二个变量并保持重要顺序?

谢谢大家。

编辑

在此之后添加第三个排序选项怎么样?如此重要 > 基本 > 更少

【问题讨论】:

    标签: php arrays usort


    【解决方案1】:

    你真的应该使用array_multisort()

    // Obtain a list of columns
    foreach ($data as $key => $row) {
        $important[$key]  = $row['important'];
        $basic[$key] = $row['basic'];
    }
    
    array_multisort($important, SORT_NUMERIC, SORT_DESC,
                    $basic, SORT_NUMERIC, SORT_DESC,
                    $data);
    

    但如果你必须使用usort():

    public function sort_by_important($a, $b) {
    
        if ($a[important] > $b[important]) {
            return -1;
        } elseif ($b[important] > $a[important]) {
            return 1;
        } else {
            if ($a[basic] > $b[basic]) {
                return -1;
            } elseif ($b[basic] > $a[basic]) {
                return 1;
            } else {
                return 0;
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      为什么不简单地使用 array_multisort()

      public function sort_by_important($a, $b) { 
          if ($a['Important'] > $b['Important']) { 
              return -1; 
          } elseif ($b['Important'] > $a['Important']) { 
              return 1; 
          } else { 
              if ($a['Basic'] > $b['Basic']) { 
                  return -1; 
              } elseif ($b['Basic'] > $a['Basic']) { 
                  return 1; 
              } else { 
                  return 0; 
              }
          } 
      } 
      

      【讨论】:

      • array_multisort 是正确的答案,我必须给肯尼加分,因为他在现场给了我答案,将订单放入单独的变量中让我感到困惑。感谢您的帮助!
      猜你喜欢
      • 2023-03-31
      • 2011-09-19
      • 1970-01-01
      • 1970-01-01
      • 2012-01-29
      • 1970-01-01
      • 1970-01-01
      • 2011-06-22
      • 2011-01-18
      相关资源
      最近更新 更多