2012-03-26 157 views
7

按字母順序排列我有一個PHP數組,看起來像這樣:PHP排序2D通過嵌套價值

Array{ 
    [0] { 
     'id'  => '0', 
     'title' => 'foo', 
     'address' => '123 Somewhere', 
    } 
    [1] { 
     'id'  => '1', 
     'title' => 'bar', 
     'address' => '123 Nowhere', 
    } 
    [2] { 
     'id'  => '2', 
     'title' => 'barfoo', 
     'address' => '123 Elsewhere', 
    } 
    [3] { 
     'id'  => '3', 
     'title' => 'foobar', 
     'address' => '123 Whereabouts', 
    } 
} 

,我想通過在嵌套陣列中的「標題」鍵對它進行排序,看起來像這樣:

Array{ 
    [1] { 
     'id'  => '1', 
     'title' => 'bar', 
     'address' => '123 Nowhere', 
    } 
    [2] { 
     'id'  => '2', 
     'title' => 'barfoo', 
     'address' => '123 Elsewhere', 
    } 
    [0] { 
     'id'  => '0', 
     'title' => 'foo', 
     'address' => '123 Somewhere', 
    } 
    [3] { 
     'id'  => '3', 
     'title' => 'foobar', 
     'address' => '123 Whereabouts', 
    } 
} 

由於我通過嵌套關鍵字「id」跟蹤每個嵌套數組,所以第一級鍵值無所謂。

我玩過ksort()但沒有成功。

+1

可能重複http://stackoverflow.com/questions/2699086/php-sort-按值多維數組) – 2012-03-26 12:44:31

回答

30

您應該使用usort()(我假設PHP 5.3+這裏):

usort($your_array, function ($elem1, $elem2) { 
    return strcmp($elem1['title'], $elem2['title']); 
}); 

編輯: 我沒有注意到你想保留索引關係,所以你真正需要使用uasort()相反,使用相同的參數。

EDIT2: 這裏是預PHP 5.3版本:

function compareElems($elem1, $elem2) { 
    return strcmp($elem1['title'], $elem2['title']); 
} 

uasort($your_array, "compareElems"); 
[由值PHP排序多維數組(的
+1

完美,這正是我所需要的。在SO上有幾個可供選擇的解決方案,但這似乎比大多數(或全部)更優雅。 – melat0nin 2012-03-26 13:48:12

+0

嗯,剛剛轉移到PHP <5.3的服務器,所以嵌入式功能不起作用..我將如何重構這與uasort之外的函數()實現相同的效果? – melat0nin 2012-03-28 14:17:37