【问题标题】:How to sort multidimensional array with respect to the first value of nested array in php?如何根据php中嵌套数组的第一个值对多维数组进行排序?
【发布时间】:2020-07-03 10:44:35
【问题描述】:

我想根据嵌套数组的第一个值对多维数组进行排序。对于下面的示例,结果应该是 [[1,3],[3, 6],[10, 20], [16, 19]]。我试过了,但什么也没发生。我想知道我在使用 usort() 时哪里出错了。

    function cmp($x, $y){
      global $arrint;
       if ($x[0] == $y[0]) {
       return 0;
        }
       return ($x[0] < $y[0]) ? -1 : 1;
        }

    $arrint = [
       [10, 20],
       [16, 19],
       [3, 6],
       [1,3]
    ];

    usort($arrint, "cmp");

【问题讨论】:

  • 您在同一个区块中有两个退货。 Return 停止函数的执行。顺便说一句,你不需要那个全局的。
  • 谢谢,你是对的,但我更正了它,问题仍然存在。
  • 我无法使用编辑后的代码进行复制。为我工作。查看@fubar 给你的答案,这是一个非常优雅的解决方案。

标签: php arrays sorting usort


【解决方案1】:

您可以使用 spaceship 运算符 (&lt;=&gt;) 减少排序逻辑的冗长。

$arrint = [
   [10, 20],
   [16, 19],
   [3, 6],
   [1,3]
];

usort($arrint, function ($a, $b) {
    return $a[0] <=> $b[0];
});

var_dump($arrint);

【讨论】:

  • "reset($a) reset($b)" 怎么样?我在想索引可能不是数字或可能不以 0 开头。或者,为了便于阅读, current(...) 也可以。但适用于任何索引的东西。 (当然OP要求[0],我可以看到,这只是一个建议)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-02
  • 2012-03-29
  • 2020-07-14
  • 2012-04-03
  • 2015-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多