Php 使用匿名函数进行字母排序的比较器函数

Php 使用匿名函数进行字母排序的比较器函数,php,syntax-error,anonymous-function,sorting,Php,Syntax Error,Anonymous Function,Sorting,我有一个二维数组,想按名称排序。我想使用匿名函数。当我想按字母顺序排序时,我的比较器函数应该是什么样子 [names] => Array ( [0] => Array ( [name] => Baba [prename] => Ali ) [1] => Array ( [name] => Pan [p

我有一个二维数组,想按名称排序。我想使用匿名函数。当我想按字母顺序排序时,我的比较器函数应该是什么样子

[names] => Array
(
    [0] => Array
        (
            [name] => Baba
            [prename] => Ali
        )

    [1] => Array
        (
            [name] => Pan
            [prename] => Peter
        )

)
为了分类,我尝试了以下方法:

usort($names, function cmp($a, $b) {
    return strcmp($a['name'], $b['name']);
});

这给了我一个意外的T_字符串,第一行应该是“(”。

您可以使用
usort

$names = Array(
"0" => Array("name" => "B","prename" => "A"),
"1" => Array("name" => "D","prename" => "B"),
"2" => Array("name" => "A","prename" => "C"),
"3" => Array("name" => "B","prename" => "D")

        );
例1

__xsort($names,"name");
var_dump($names);
输出

array
  0 => 
    array
      'name' => string 'A' (length=1)
      'prename' => string 'C' (length=1)
  1 => 
    array
      'name' => string 'B' (length=1)
      'prename' => string 'A' (length=1)
  2 => 
    array
      'name' => string 'B' (length=1)
      'prename' => string 'D' (length=1)
  3 => 
    array
      'name' => string 'D' (length=1)
      'prename' => string 'B' (length=1)
array
  0 => 
    array
      'name' => string 'B' (length=1)
      'prename' => string 'A' (length=1)
  1 => 
    array
      'name' => string 'D' (length=1)
      'prename' => string 'B' (length=1)
  2 => 
    array
      'name' => string 'A' (length=1)
      'prename' => string 'C' (length=1)
  3 => 
    array
      'name' => string 'B' (length=1)
      'prename' => string 'D' (length=1))
例2

__xsort($names,"prename");
var_dump($names);
输出

array
  0 => 
    array
      'name' => string 'A' (length=1)
      'prename' => string 'C' (length=1)
  1 => 
    array
      'name' => string 'B' (length=1)
      'prename' => string 'A' (length=1)
  2 => 
    array
      'name' => string 'B' (length=1)
      'prename' => string 'D' (length=1)
  3 => 
    array
      'name' => string 'D' (length=1)
      'prename' => string 'B' (length=1)
array
  0 => 
    array
      'name' => string 'B' (length=1)
      'prename' => string 'A' (length=1)
  1 => 
    array
      'name' => string 'D' (length=1)
      'prename' => string 'B' (length=1)
  2 => 
    array
      'name' => string 'A' (length=1)
      'prename' => string 'C' (length=1)
  3 => 
    array
      'name' => string 'B' (length=1)
      'prename' => string 'D' (length=1))
使用的功能

function __xsort(&$names,$key) {
    usort($names, function ($a, $b) use($key) {
        if ($a[$key] == $b[$key]) {
            return 0;
        }
        return ($a[$key] < $b[$key]) ? - 1 : 1;
    });

    return $names;
}
function_uxsort(&$names,$key){
usort($name,function($a,$b)use($key){
如果($a[$key]==b[$key]){
返回0;
}
返回($a[$key]<$b[$key])?-1:1;
});
返回$names;
}

错误并不那么明显,但再次思考匿名函数的概念,我得到了提示。函数名不可能存在。解决我的确切问题的正确方法是

usort($names, function ($a, $b) {
    return strcmp($a['name'], $b['name']);
});

请看一下
usort()
。错误说明了错误所在。即,它没有说谎。提示:)嗯,不是很匿名,是吗:。。谢谢。+1这个通用数组排序函数,谢谢。php有。@hakre你不能用
array\u multisort
中的键排序你也一直在找你能帮我找一下吗。。。我想你很了解PHP的内部结构better@Baba:当然你可以用钥匙分类,但是你更缺少我感觉到的。另请参见:@Baba:获取要排序的列的数组,然后使用
multisort
。完成。这就是array_column如何对多维数组进行排序。