2012-10-30 196 views
-2

如何以下陣列,這樣的房屋進行排序紅,綠,藍排序(喬治:位置0,史蒂夫:位置[1],弗雷德:位置[2])?我試過使用sort(),asort()和usort(),但沒有做什麼,我需要什麼?排序多維數組PHP

編輯:的排序需要能夠很容易地改變。它可以按照House顏色的任何順序。使用的順序僅僅是一個例子。

+0

不要只是說usort沒有你所需要有人跟了上去。它可以用來按值排序數組。 –

回答

1

如果我知道你需要做什麼,你可以使用usort

usort($array, function($a, $b) { 
    $sort = array('Red', 'Green', 'Blue'); 
    if (array_search($a['House_Colour'], $sort) > array_search($b['House_Colour'], $sort)) return 1; 
    if (array_search($a['House_Colour'], $sort) < array_search($b['House_Colour'], $sort)) return -1; 
    return 0; 
}); 

如果你能定義利用上,而不是依靠的房子顏色的解決方案將被straiforward和更高效的字符串。

你應該在靜態類中定義的房子顏色(模擬枚舉類型)

Class HouseColour { 
    const Red = 0; 
    const Green = 1; 
    const Blue = 2; 
} 

在這種情況下,你要申報對手/播放器

$opponent = array ('Opponent'=>'Steve', 'House_Colour'=>HouseColour::Green); 

如果你是非舒適與類和靜態常量(你應該是舒適與他們的利益是真正偉大的),你可以求助於定義的序列

define ('HC_Red',0); 
define ('HC_Green', 1); 
define ('HC_Blue', 2); 

對手成爲

$opponent = array ('Opponent'=>'Steve', 'House_Colour'=>HC_Green); 
在這兩種情況下

的usort功能是相同的:

usort($array, function($a, $b) { 
    if ($a['House_Colour'] > $b['House_Colour']) return 1; 
    if ($a['House_Colour'] < $b['House_Colour']) return -1; 
    return 0; 
}); 
2

你可能想嘗試usort。它允許您對指定自定義回調函數的數組進行排序。由於您沒有清楚地說明您想要對物品進行分類的標準,所以我無法真正幫助您完成此功能。 (我的猜測是按字母順序House_Colour逆轉,因爲Red > Green > Blue但我不知道,如果你沒有其他的標準我忽視了。)

由房子的顏色在您指定的順序這個簡單的比較功能訂單項,很容易修改到你真正想要的東西。每種顏色都有,你可以指定你的自我(你也可以很容易地添加新的顏色)的等級,也可以很容易地通過在else if部分翻轉比較運營商更改順序。

function cmp($a, $b) { 
    $colors = Array('RED' => 3, 'GREEN' => 2, 'BLUE' => 1); 
    // A is ranked same as B 
    if ($colors[$a['House_Colour']] == $colors[$b['House_Colour']]) { 
     return 0; 
    } 
    // A is ranked above B 
    else if ($colors[$a['House_Colour']] > $colors[$b['House_Colour']]) { 
     return 1; 
    } 
    // A is ranked below B 
    else { 
     return -1; 
    } 
} 

您可以看到一個運行示例here

+0

我試過usort,但是我沒有運用函數的邏輯。分類需要能夠容易地改變。它可以按照House顏色的任何順序。使用的順序僅僅是一個例子。 – user826855

+0

嘛'usort'是挑釁你想要去的方式,你可以用排序的自定義功能的陣列的唯一途徑。如果您沒有清楚地說出排序標準是什麼,那麼沒有人能夠正確地告訴您,我們是程序員而不介意讀者。 – clentfort