2012-10-30 41 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