如何以下陣列,這樣的房屋進行排序紅,綠,藍排序(喬治:位置0,史蒂夫:位置[1],弗雷德:位置[2])?我試過使用sort(),asort()和usort(),但沒有做什麼,我需要什麼?排序多維數組PHP
編輯:的排序需要能夠很容易地改變。它可以按照House顏色的任何順序。使用的順序僅僅是一個例子。
如何以下陣列,這樣的房屋進行排序紅,綠,藍排序(喬治:位置0,史蒂夫:位置[1],弗雷德:位置[2])?我試過使用sort(),asort()和usort(),但沒有做什麼,我需要什麼?排序多維數組PHP
編輯:的排序需要能夠很容易地改變。它可以按照House顏色的任何順序。使用的順序僅僅是一個例子。
如果我知道你需要做什麼,你可以使用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;
});
你可能想嘗試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。
我試過usort,但是我沒有運用函數的邏輯。分類需要能夠容易地改變。它可以按照House顏色的任何順序。使用的順序僅僅是一個例子。 – user826855
嘛'usort'是挑釁你想要去的方式,你可以用排序的自定義功能的陣列的唯一途徑。如果您沒有清楚地說出排序標準是什麼,那麼沒有人能夠正確地告訴您,我們是程序員而不介意讀者。 – clentfort
不要只是說usort沒有你所需要有人跟了上去。它可以用來按值排序數組。 –