我有一个多维数组,我使用这个函数按列排序:
function sort_mul_dim_arr(&$array, $sort_col) {
array_multisort( array_column($array, $sort_col), SORT_ASC, $array );
}
sort_mul_dim_arr($test_arr, 3);
这只在一个方向上排序。我想传递另一个参数来控制排序的方向。像这样:
$dir = "SORT_ASC"; /* = $_GET["sort"] */
function sort_mul_dim_arr(&$array, $sort_col, $dir) {
array_multisort( array_column($array, $sort_col), $dir, $array );
}
sort_mul_dim_arr($test_arr, 3, $dir);
但这不起作用。为什么会这样,我该如何解决?
我想到了另一种让它工作的方法,那就是在main函数中使用if else
语句:
$dir = "SORT_DESC";
function sort_mul_dim_arr(&$array, $sort_col, $dir) {
if ($dir == "SORT_ASC") {
array_multisort( array_column($array, $sort_col), SORT_ASC, $array );
} else {
array_multisort( array_column($array, $sort_col), SORT_DESC, $array );
}
}
sort_mul_dim_arr($test_arr, 3, $dir);
,但这是不必要的。为什么要使用额外的代码行?除此之外,我还会用if else
来表示其他东西,所以如果我用if else
的话,事情会变得更复杂。
如何将字符串传递给main函数并将其用作排序方向?
我很不耐烦,在得到答案之前先搜索了一下。
首先,我想知道SORT_ASC
的类型,所以我检查了它。
echo gettype(SORT_ASC); // integer
结果表明SORT_ASC
和SORT_DESC
都是整数。然后我检查了它们的值。
echo SORT_ASC; // 4
echo SORT_DESC; // 3
那么现在,我将把$dir
设置为"SORT_ASC"
,而不是设置为4
。
// SORT_ASC = 4
// SORT_DESC = 3
$dir = 4;
function sort_mul_dim_arr(&$array, $sort_col, $dir) {
array_multisort( array_column($array, $sort_col), $dir, $array );
}
sort_mul_dim_arr($test_arr, 3, $dir);