使用 GET 变量对数组进行排序.没有排序


sort array by use of GET variable.. no sorting

我有一个由4个字段组成的数组。

 $retval[] = array(
      "name" => "$dir$entry/",
      "type" => filetype("$dir$entry"),
      "size" => 0,
      "lastmod" => filemtime("$dir$entry")
    );

我想根据一个变量对这个数组进行排序,该变量包含 4 个字段中的 1 个(例如:类型、名称等)

$sortBy = $_GET['sortBy'];

此函数应使用 $sortBy 变量:

function compare_field($a, $b){
return strnatcmp($a["'.$sortBy.'"], $b["'.$sortBy.'"]) 
}

并像这样称呼:

usort($retval, "compare_field");

但是结构不起作用..

希望有人能为我指出正确的方向,我是明显的新手。

首先,您按一个键进行排序,该键实际上是:'..',而不是$sortBy的值。您正在尝试使用变量值作为键,为此,您无需弄乱引号,只需编写$arrayName[$keyVariable]即可。就是这样。
其次,compare_field无法访问$sortBy变量。该变量是创建它的范围的本地变量,或者是全局变量。无论哪种方式,函数都无法访问它。

如果您希望usort回调能够访问$sortBy变量,最简单的方法是使用闭包(匿名函数)作为回调:

usort($retval, function ($a, $b) use ($sortBy) {
    return strnatcmp($a[$sortBy], $b[$sortBy]);
});