2012-10-06 2 views
0

2 차원 배열을 가지고 있으며이를 이름순으로 정렬하려고합니다. 익명 기능과 함께 usort()을 사용하고 싶습니다. 알파벳으로 항목을 정렬하려면 어떻게해야합니까? 첫 번째 줄에 나에게 unexpected T_STRING, expecting '('을 제공익명 함수를 사용한 알파벳 정렬을위한 비교 자 함수

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

: 정렬

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

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

) 

, 나는이 시도.

+0

()가' – chelmertz

+2

http://php.net/manual/en/functions.anonymous.php에 usort'에서보세요이다. 오류는 무엇이 잘못되었는지 설명합니다. 나는. 그것은 거짓말하지 않습니다. 힌트 :) – 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); 
,451,515,

출력

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 for me ... 나는 당신이 PHP 내부를 훨씬 잘 이해한다고 생각한다. – Baba