我有一个由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");
但是施工不起作用..
希望有人能指出我正确的方向,成为我的明显新人。
答案 0 :(得分:3)
首先,您要按实际的密钥排序:'..'
,而不是$sortBy
的值。您尝试使用变量值作为关键,为此,您不需要乱用引号,只需编写$arrayName[$keyVariable]
即可。这就是它。
其次是compare_field
无法访问$sortBy
变量。该变量是创建它的范围的本地变量,或者它是一个全局变量。无论哪种方式,功能都无法访问它。
如果希望usort
回调能够访问$sortBy
变量,最简单的方法是使用闭包(匿名函数)作为回调:
usort($retval, function ($a, $b) use ($sortBy) {
return strnatcmp($a[$sortBy], $b[$sortBy]);
});