2012-10-06 35 views
0

我有一個二維數組,並且想按名稱排序。我想使用具有匿名功能的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 '('第一線。

+0

看看'usort()' – chelmertz

+2

http://php.net/manual/en/functions.anonymous.php。錯誤指出什麼是錯誤的。即它不會說謊。提示:) – PeeHaa

+0

那麼,不是非常匿名,是它:) ..謝謝。 – a1337q

回答

1

的錯誤是不那麼明顯,但對匿名函數的概念反覆思考,我得到了暗示。函數名稱不能在那裏。我確切的問題,正確的解決方法是

usort($names, function ($a, $b) { 
    return strcmp($a['name'], $b['name']); 
}); 
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; 
} 
+1

+1這個通用數組排序函數,謝謝。 – a1337q

+0

PHP有['array_multisort'](http://php.net/array_multisort),選擇那些。 – hakre

+0

@hakre你不能用'array_multisort'中的鍵排序也一直在尋找你你可以看看http://stackoverflow.com/questions/12759011/can-some-break-down-this-php-code對我來說...我認爲你理解PHP內部更好 – Baba