我有一个类似的数组:
Array ( [0] => XL [1] => M [2] => L [3] => XL [4] => S [5] => XXL)
但我想对我的数组进行排序:
S - M - L - XL - XXL
我知道我可以用usort()来做,但是,我得到了一些其他值,如数字:
Array ( [0] => 14 [1] => 37 [2] => 38 [3] => 39 [4] => 40 [5] => 44 [6] => 36 [7] => 28 )
我的意思是这是一个动态阵列......
我正在使用那个asort();用于排序这些值。
是否有任何功能/方法可以做到这一点?
答案 0 :(得分:11)
function cmp($a, $b)
{
$sizes = array(
"XXS" => 0,
"XS" => 1,
"S" => 2,
"M" => 3,
"L" => 4,
"XL" => 5,
"XXL" => 6
);
$asize = $sizes[$a];
$bsize = $sizes[$b];
if ($asize == $bsize) {
return 0;
}
return ($asize > $bsize) ? 1 : -1;
}
usort($your_array, "cmp");
答案 1 :(得分:4)
您可以在PHP中使用仍然使用usort
函数并提供实际的比较函数。像这样:
function cmp($a, $b)
{
if ($a == $b) {
return 0;
}
if(is_numeric($a) && is_numeric($b))
{
$a = intval($a);
$b = intval($b);
return $a > $b ? 1 : -1;
}
elseif(is_numeric($a) || is_numeric($b))
{
// somehow deal with comparing e.g. XXL to 48
}
else
{
// deal with comparing e.g. XXL to M as you would
}
}
usort($my_array, "cmp");
答案 2 :(得分:1)
你可以安排相应大小的键,你有S,M,L(-1,1,1)如果前面有X'只是生成一个值,那么结果值就是关键(也许你应该绕())瞧
EX:
S=15
X=1
XXS = 15-2*1 =13
XS= 15-1=14
array([13]=>'XXS',[14]=>'XS');
答案 3 :(得分:0)
这可能会有所帮助: https://gist.github.com/adrianbadowski/5c2f287a96d10a115d75f02f12b9e134
排序大小数组:数组('1','5','1XL','4','10 .5','9.5','s','XS','L','m') into:array('1','4',5','9.5','10 .5','XS','s','L','1XL')