【问题标题】:Php Array Sorting Clothing Sizes (XXS XS S M L XL XXL) and Numbers on a Dynamic ArrayPhp 数组排序服装尺码 (XXS XS S M L XL XXL) 和动态数组上的数字
【发布时间】:2011-10-04 12:36:56
【问题描述】:

我有一个类似的数组:

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();用于对这些值进行排序。

有没有什么功能/方法可以做到这一点?

【问题讨论】:

  • 为什么在同一个数组中有这些截然不同的值集?或者,如果它们是不同的数组,为什么必须使用相同的函数对两个数组进行排序?

标签: php arrays sorting


【解决方案1】:
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");

【讨论】:

  • 太好了,我喜欢。只是一个小小的补充,usort 按数组值排序,你可以使用与 uksort 相同的函数来按数组键排序。
【解决方案2】:

您仍然可以在 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");

【讨论】:

  • @dr.linux 我知道你没有 - 其他人有,我只是想知道为什么
【解决方案3】:

好吧,你可以安排相应大小的键,你有 S,M,L (-1,1,1) 如果你前面有 X`s 只是生成一个值,使结果值成为键(也许你应该 round() ) 瞧

前:

    S=15
    X=1
    XXS = 15-2*1 =13
    XS= 15-1=14
array([13]=>'XXS',[14]=>'XS');

【讨论】:

    【解决方案4】:

    这可能会有所帮助: https://gist.github.com/adrianbadowski/5c2f287a96d10a115d75f02f12b9e134

    排序大小数组:array('1', '5', '1XL', '4', '10.5', '9.5', 's', 'XS', 'L', 'm') 进入:数组('1','4',5','9.5','10.5','XS','s','L','1XL')

    【讨论】:

      猜你喜欢
      • 2020-03-11
      • 2019-02-03
      • 1970-01-01
      • 1970-01-01
      • 2021-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-08
      相关资源
      最近更新 更多