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

时间:2016-03-05 13:10:45

标签: php arrays sorting

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

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

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

$sortBy = $_GET['sortBy'];

此函数应使用$ sortBy变量:

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

并且这样称呼:

usort($retval, "compare_field");

但是施工不起作用..

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

1 个答案:

答案 0 :(得分:3)

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

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

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