我有一个多维数组,我使用此函数按列对其进行排序:
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函数并将其用作排序方向?
答案 0 :(得分:0)
我不耐烦,在得到答案之前进行了搜索。
首先,我想知道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);