2012-05-07 4 views
0

사람들 이름과 일부 정보가 들어있는 다차원 배열을 정렬하고 있습니다. asort($obj)을 사용하여 알파벳순으로 첫 번째 이름으로 정렬합니다 (첫 번째로옵니다). 그것은 위대한 작품, 오직 지금은 성보다는 처음에 그것을 정렬해야합니다. 그러나 예를 들어 "조 스미스"의 전체 이름은 "이름"키 아래에 있습니다. 나는 성 (first) 대신 성 (last name)으로 정렬해야한다. 어떻게해야합니까?두 번째 단어로 알파벳순으로 배열 정렬

수정 잘못된 방식으로 시도한 것 같습니다. DB에서 이름과 성을 동일한 문자열이 아닌 필드를 구분하는 데 간단하게 할당하는 것이 가장 쉬웠습니다.

+1

키가 중요한 경우 – mishu

+0

나는 이들을 사용하는 방법을 알고 있지만 문제는 아닙니다. 문제는 이름과 성은 기본적으로 하나의 문자열이라는 것입니다. 문자열을 트래버스하고 성을 찾고 그 성을 통해 정렬 할 수 있어야합니다. – mdance

+1

불가능 : [이름은 어렵다] (http://timothy.green.name/links/names-are-hard). 서지에 관련된 사서 나 다른 사람에게 물어보십시오. – TRiG

답변

3

사용 usort :

function cmp($a, $b) 
{ 
    list($firstNameA, $lastNameA) = explode(" ", $a["name"], 2); 
    list($firstNameB, $lastNameB) = explode(" ", $b["name"], 2); 

    return strcmp($lastNameA, $lastNameB); 
} 

usort($array, "cmp"); 
0

아니, 이전의 대답에 비해 매우 다르다. 그러나 그러한 상황에서는 자연 알고리즘을 사용하는 것이 좋은 선택 일 수 있습니다.

$array = array( 
    array("first", "last"), 
    array("first2", "last2") 
); //For an array of such format 
function compare_last($a, $b) { return strnatcmp($a[1], $b[1]); } 
usort($array, 'compare_last'); 
관련 문제