我有一个由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]);
});