Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用GET变量对数组进行排序。。不分类_Php_Arrays_Sorting - Fatal编程技术网

Php 使用GET变量对数组进行排序。。不分类

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变量

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

 $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]);
});