Php 使用GET变量对数组进行排序。。不分类
我有一个由4个字段组成的数组Php 使用GET变量对数组进行排序。。不分类,php,arrays,sorting,Php,Arrays,Sorting,我有一个由4个字段组成的数组 $retval[] = array( "name" => "$dir$entry/", "type" => filetype("$dir$entry"), "size" => 0, "lastmod" => filemtime("$dir$entry") ); 我想根据一个变量对这个数组进行排序,该变量包含4个字段中的1个(例如:type、name等) 此函数应使用$sortBy变量
$retval[] = array(
"name" => "$dir$entry/",
"type" => filetype("$dir$entry"),
"size" => 0,
"lastmod" => filemtime("$dir$entry")
);
我想根据一个变量对这个数组进行排序,该变量包含4个字段中的1个(例如:type、name等)
此函数应使用$sortBy变量:
function compare_field($a, $b){
return strnatcmp($a["'.$sortBy.'"], $b["'.$sortBy.'"])
}
这就是所谓的:
usort($retval, "compare_field");
但是建筑不起作用
希望有人能给我指出正确的方向,我显然是个新手。首先,你是按一个键排序的,实际上是:
'..
,而不是$sortBy
的值。您试图使用一个变量值作为键,要做到这一点,您不需要乱用引号,只需编写$arrayName[$keyVariable]
。就这样。其次是
compare\u字段
无法访问$sortBy
变量。该变量是创建它的作用域的局部变量,或者是全局变量。不管怎样,函数都无法访问它
如果希望usort
回调能够访问$sortBy
变量,最简单的方法是使用闭包(匿名函数)作为回调:
usort($retval, function ($a, $b) use ($sortBy) {
return strnatcmp($a[$sortBy], $b[$sortBy]);
});
有趣。谢谢你的意见。我尝试了你的解决方案,但是$sortBy仍然没有被使用。如果我用例如“name”来替换它,它会工作,但是当我使用$sortBy时,什么都没有发生。$sortBy的名称是相等的……我使用旧代码实现了它,但实际上没有引号,并且使$sortBy成为全局的。就像你指出的那样,这是一个范围问题。。但很明显,您的解决方案仍然存在范围问题?好奇您对它的看法。
$sortBy
需要在调用usort
的相同范围内可用。除非声明匿名函数的地方有权访问此变量,否则不能将$sortBy
传递给该匿名函数。如果您在全局范围以外的范围(即函数或方法)中调用usort
,那么这就是它不起作用的原因。我需要看更多的代码才能确定
usort($retval, function ($a, $b) use ($sortBy) {
return strnatcmp($a[$sortBy], $b[$sortBy]);
});