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

时间:2010-11-24 00:45:04

标签: 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;
}

有一个更好的方法来做到这一点。我一直在研究ksort()multisort()以及各种各样的种类,直到我厌倦了整理它。

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

array(
  array(3,5,7),
  array(2,6,8),
  array(1,4,9)
);

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

array(
  array(1,4,9),
  array(3,5,7),
  array(2,6,8)
);

有人有链接(我确定之前已经提出过这个问题),或者有人会说“你需要foosort,绝对是”。非常感谢。

3 个答案:

答案 0 :(得分:8)

array_multisort的{​​{3}}中,提到它可以用于此类事情。

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

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

array_multisort($sort_column, $a);

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

从PHP 5.3起,您可以通过定义$i函数来使用documentation(将cmp传递给函数):

$cmp = function($x, $y) use ($i) { ... };

答案 1 :(得分:1)

您可以使用use访问$i

function cmp($x, $y) use ($i) {
    // $i now available
    if ($x[$i] == $y[$i]) { return 0; }
    return ($x[$i] < $y[$i]) ? -1 : 1;
}

答案 2 :(得分:0)

http://www.php.net/manual/en/function.sort.php#99419

  

phpdotnet at m4tt dot co dot uk

     

通过特定键对数组进行排序的简单函数。保持索引关联。