首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Php数组对动态数组上的衣服大小(XXS XS S M L XL XXL)和数字进行排序

Php数组对动态数组上的衣服大小(XXS XS S M L XL XXL)和数字进行排序
EN

Stack Overflow用户
提问于 2011-10-04 20:36:56
回答 4查看 10.7K关注 0票数 7

我有一个类似这样的数组:

代码语言:javascript
复制
Array ( [0] => XL [1] => M [2] => L [3] => XL [4] => S [5] => XXL)

但是我想对我的数组进行排序,如下所示:

代码语言:javascript
复制
 S - M - L - XL - XXL

我知道我可以用usort()来做这件事,但是,我得到了一些其他的值,比如数字:

代码语言:javascript
复制
Array ( [0] => 14 [1] => 37 [2] => 38 [3] => 39 [4] => 40 [5] => 44 [6] => 36 [7] => 28 )

我的意思是这是一个动态数组。

我使用for that asort();对这些值进行排序。

有什么函数/方法可以做到这一点吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-31 23:39:14

代码语言:javascript
复制
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");
票数 15
EN

Stack Overflow用户

发布于 2011-10-04 20:46:37

你可以在PHP中使用usort函数,并提供实际的比较函数。如下所示:

代码语言:javascript
复制
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");
票数 4
EN

Stack Overflow用户

发布于 2011-10-04 21:36:26

你可以用相应的大小排列键,你有S,M,L (-1,1,1),如果你前面有X,只需生成一个值,将结果值设为key (也许你应该四舍五入()),就是这样

例如:

代码语言:javascript
复制
    S=15
    X=1
    XXS = 15-2*1 =13
    XS= 15-1=14
array([13]=>'XXS',[14]=>'XS');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7647982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档