2012-05-07 22 views
0

私は人々の名前といくつかの情報を含む多次元配列をソートしています。私はasort($obj)を使ってアルファベット順に名前をソートしています(最初に来ます)。それは素晴らしい、今私は最初にではなく、彼らの姓でソートする必要があります。しかし、その全体の名前 "Joe Smith"は例えば "name"キーの下にあります。私はそれを最初のものの代わりに姓でソートする必要があります。これどうやってするの?2番目の単語のアルファベット順に配列を並べ替えます。

EDIT 私は間違った方法で行ったようです。 DBからの姓と名を同じ文字列ではなくフィールドを区切るために割り当てるのが最も簡単でした。

+1

キーが重要な場合は、 – mishu

+0

私はそれらを使用する方法を知っていますが、問題ではありません。問題は、最初の名前と最後の名前は基本的に1つの文字列であることです。文字列をたどり、姓を見つけて、その姓でソートできるようにする必要があります。 – 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'); 
関連する問題