2012-05-07 95 views
0

我在排序一個包含人名和一些信息的多維數組。我使用asort($obj)按字母順序排列它們的名字(它首先出現)。它工作的很好,只是現在我需要按姓氏排序,而不是先排序。然而,例如整個名稱「Joe Smith」是在「名稱」鍵下。我需要它按姓氏排序,而不是第一個。我怎樣才能做到這一點?按字母順序排列數組第二個字

編輯 看來我錯了。最簡單的方法是簡單地將數據庫中的名字和姓氏分配給單獨的字段,而不是相同的字符串。

+1

對,或http://php.net/uasort如果鑰匙很重要 – 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');