变量作为排序顺序


Variable as sort order

我有一个多维数组,我使用这个函数按列排序:

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_ASCSORT_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);