变量作为排序顺序

时间:2014-08-14 17:34:04

标签: php variables arguments

我有一个多维数组,我使用此函数按列对其进行排序:

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函数并将其用作排序方向?

1 个答案:

答案 0 :(得分:0)

我不耐烦,在得到答案之前进行了搜索。

首先,我想知道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);