2011-08-31 22 views
0

確定的值訂購ABC順序的排列,我有一個數組,像這樣:PHP如何從它的界限的1

$my_array = array(
    'hi' => array('description' => 'how are you?', 'title' => 'Hello', 'link' => 'http://mylink.com'), 
    'bye' => array('description' => array('Goodbye!', 'see ya'), 'title' => 'See Ya Later', 'link' => 'http://mybyelink.com'), 
    'not_now' => array('description' => array('I am away now!', 'gone'), 'title' => 'Away', 'link' => 'http://myawaylink.com'), 
    'back' => array('description' => array('I am back now!', 'back', 'present'), 'title' => 'Here', 'link' => 'http://mybacklink.com'), 
); 

所以我想數組進行排序,在PHP代碼中,以某種方式,以便它通過每個數組綁定的TITLE命令它:$my_array['hi']['title'],$my_array['bye']['title'],$my_array['not_now']['title']$my_array['back']['title'],但它必須保持數組完整,以便hi,bye,not_now和back內的所有值完全相同和所有的數組(如果有的話,也是一樣的)。

所以這個陣列將需要取決於冠軍 ABC順序來排序,所以應該按以下順序返回:

$my_array = array(
    'not_now' => array('description' => array('I am away now!', 'gone'), 'title' => 'Away', 'link' => 'http://myawaylink.com'), 
    'hi' => array('description' => 'how are you?', 'title' => 'Hello', 'link' => 'http://mylink.com'), 
    'back' => array('description' => array('I am back now!', 'back', 'present'), 'title' => 'Here', 'link' => 'http://mybacklink.com'), 
    'bye' => array('description' => array('Goodbye!', 'see ya'), 'title' => 'See Ya Later', 'link' => 'http://mybyelink.com'), 
); 

標題是在ABC順序這裏:走,你好,到了這裏,請參閱Ya後期。

我怎樣才能做到這一點,仍然保持數組完整的所有子數組呢?

謝謝你們:)

回答

1

您想使用的功能uasort與該函數中使用strnatcmp用戶自定義排序功能。這裏是你的代碼的例子:

function titleSort($a, $b) { 
    return strnatcmp($a['title'], $b['title']); 
} 

uasort($my_array, 'titleSort'); 

如果需要,你可以添加一些理智上輸入變量檢查,以確保它們是通過使用is_array陣列。

+0

哇,萬分感謝,正是我需要的!我不明白爲什麼$ a ['title']和$ b ['title']完全相同,但又不熟悉PHP的uasort函數。 $ a和$ b究竟代表什麼?數組的不同邊界? – SoLoGHoST

+1

$ a和$ b表示您正在比較的數組中的兩項。所以PHP迭代你的給定數組,在這種情況下$ my_array並且它將每個數組元素與其他數組進行比較。所以$ a是$ my_array的一個元素,$ b是它與該數組進行比較的另一個元素。您的$ my_array是多維的,因此$ a也是一個數組,其中一個鍵是'title',與$ b相同。我們可以比較那個子陣列中的任何東西。當然,這假定$ my_array的每個元素都是以相同的方式構成的,也就是說,它是一個帶有'title'鍵的數組。 – davidethell

+0

好的,謝謝你向我解釋這個:) – SoLoGHoST