如何以下阵列,这样的房屋进行排序红,绿,蓝排序(乔治:位置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没有你所需要有人跟了上去。它可以用来按值排序数组。 –