0

2次元配列があり、名前で並べ替えたいと思います。匿名関数でusort()を使用したいと思います。アルファベット順に並べ替える場合、コンパレータ関数はどのようになりますか?

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

それは私unexpected T_STRING, expecting '('に最初の行を与えます。

4

2 に答える 2

1

使用できます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)

例2

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

出力

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;
}
于 2012-10-06T12:10:22.537 に答える
1

バグはそれほど明白ではありませんでしたが、無名関数の概念についてもう一度考えて、ヒントを得ました。関数名はありません。私の正確な問題の正しい解決策は

usort($names, function ($a, $b) {
    return strcmp($a['name'], $b['name']);
});
于 2012-10-06T12:19:50.113 に答える