此代码无法正常运行,但它表明了我要做的事情:
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
,绝对是”。非常感谢。
答案 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
通过特定键对数组进行排序的简单函数。保持索引关联。