PHP按索引排序2d数组(非关联)

Ben*_*Ben 3 php sorting

此代码无法正常运行,但它表明了我要做的事情:

function sort_2d_by_index($a,$i) {
  function cmp($x, $y) {
    // Nested function, can't find $i
    // (global $i defeats the purpose of passing an arg)
    if ($x[$i] == $y[$i]) { return 0; }
    return ($x[$i] < $y[$i]) ? -1 : 1;
  }

  usort($a,"cmp");
  return $a;
}
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法来做到这一点.我一直在检查ksort(),multisort()各种各样的种类,直到我有点厌倦试图整理它.

情况是这样的:我有一个二维阵列......

array(
  array(3,5,7),
  array(2,6,8),
  array(1,4,9)
);
Run Code Online (Sandbox Code Playgroud)

...我希望按列索引排序.比如说,列[1],会给出这样的结果:

array(
  array(1,4,9),
  array(3,5,7),
  array(2,6,8)
);
Run Code Online (Sandbox Code Playgroud)

有人有链接(我确定之前有人问过),或者有人说"你需要foosort,肯定".非常感谢.

And*_*eKR 8

文档array_multisort提到它可以用于这种事情.

您无法避免创建仅包含一列的数组:

$sort_column = array();
foreach ($a as $row)
    $sort_column []= $row[1]; // 1 = your example

array_multisort($sort_column, $a);
Run Code Online (Sandbox Code Playgroud)

这会同步对两个数组进行排序,以便之后整个数组的排序顺序与$ sort_column数组相同.

从PHP 5.3开始,你可以通过定义你的函数来使用一个闭包(传入$i函数)cmp:

$cmp = function($x, $y) use ($i) { ... };
Run Code Online (Sandbox Code Playgroud)