【问题标题】:Sort X & Y by size [duplicate]按大小对 X 和 Y 进行排序 [重复]
【发布时间】:2015-05-26 00:04:27
【问题描述】:

我试图弄清楚如何对一个数组进行排序,该数组具有子数组,每个子数组都有一个 X 和 Y 坐标。我需要先将最大尺寸排序到最小尺寸,例如:

$sizes = array(
    'a' => array(
        'x' => 10,
        'y' => 140,
    ),
    'b' => array(
        'x' => 20,
        'y' => 24,
    ),
    'c' => array(
        'x' => 20,
        'y' => 40,
    ),
    'd' => array(
        'x' => 50,
        'y' => 50,
    ),
    'e' => array(
        'x' => 10,
        'y' => 9,
    ),
);

应该自然地这样诉诸:

$sizes = array(
    'e' => array(
        'x' => 10,
        'y' => 9,
    ),
    'b' => array(
        'x' => 20,
        'y' => 24,
    ),
    'c' => array(
        'x' => 20,
        'y' => 40,
    ),
    'd' => array(
        'x' => 50,
        'y' => 50,
    ),
    'a' => array(
        'x' => 10,
        'y' => 140,
    ),
);

在使用 asort 之前我已经按值排序,但是我不确定如何在这样的多维数组上排序和维护索引关联。任何帮助都会很棒!

【问题讨论】:

  • 你试过uasort()吗?还有,[10, 140]不应该是第二项吗?
  • 嗨,Jack,不,我没有,但是 10 x 140 实际上是最大的,因为它的宽度更小,它仍然会占用最多的区域。
  • 那么,uasort($sizes, function($a, $b) { return ($a['x'] * $a['y']) - ($b['x'] * $b['y']); }); 呢?
  • 非常感谢这个千斤顶,但为什么 10 x 140 最终排在倒数第二位?
  • 因为 2500 > 1400。

标签: php sorting multidimensional-array asort


【解决方案1】:

对我来说非常棒:

    function sort_multi_array_2_col($arrInbound
        , $strColumn1
        , $strColumn1Sort = "ASC"
        , $strColumn2
        , $strColumn2Sort = "ASC") {

        reset($arrInbound);

        foreach ($arrInbound as $key => $row) {
            $columnToSort1[$key] = $row[$strColumn1];
            $columnToSort2[$key] = $row[$strColumn2];
       }

        array_multisort($columnToSort1
            , get_sort_flag($strColumn1Sort)
            , $columnToSort2
            , get_sort_flag($strColumn2Sort)
            , $arrInbound);

        return $arrInbound;
  }

    function get_sort_flag($strSort) {

    if($strSort == "ASC"){
          return SORT_ASC;
      } else {
          return SORT_DESC;
      }

  }

【讨论】:

  • 嗨伙计,get_sort_flag 是什么,这似乎是我不存在的功能?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-25
  • 1970-01-01
  • 2017-07-08
  • 2014-05-10
  • 1970-01-01
  • 2014-04-27
  • 1970-01-01
相关资源
最近更新 更多