如何排序特定的过滤器的阵列? [英] How to sort an array by specific filter?

查看:85
本文介绍了如何排序特定的过滤器的阵列?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

可以说,我有一个这样的数组:

  $ ARR =阵列('M','38','37','3XL','XL','39','L','S',' 36','41','40','XXL');

(其阵列为客户准备的订单项目的鞋子可用尺寸)

如何对它进行排序升序(第一个alpha-尺寸:S,M,L,XL,XXL,3XL;然后数字,大小:36,37,38,39,40,41),所以我会得到数组

  $解析度=阵列(S,M,L,XL,XXL','3XL','36','37',' 38','39','40','41');

有一些功能来做到这一点?


解决方案

如果大小都被定义,那么你可以有一个 $ baseArr 包含所有有效的大小和排序基于当前ARR

 函数sortSizeArr($ ARR){
    $ baseArr =阵列(S,M,L,XL,XXL','3XL','36','37','38','39','40',' 41');
    $ sortedArr =阵列();
    为($ I = 0; $ I<计数($ baseArr); $ I ++){
        如果(in_array($ baseArr [$ i],$ ARR))
            array_push($ sortedArr,$ baseArr [$ i]);
    }
    返回$ sortedArr;
}

测试:

  $大小=阵列('M','38','S','36','41','40','XXL');
的print_r(sortSizeArr($大小));


  

阵列([0] => S [1] => M [2] => XXL [3] => 36 [4] => 38 [5] => 40 [6]
  => 41)


按Legionar编辑:
我调用这个函数,只要有字母的大小,没有数字,大小。有些尺寸是F.E. M / 5,L / 6,XL / 7,XXL / 8 ,所以我改变一点你的函数。这帮助了我,谢谢

 函数sortSizeArr($ ARR){
    $ baseArr =阵列('XXS','XS,S,M,L,XL,XXL','XXXL','3XL');    $ sortedArr =阵列();    为($ I = 0; $ I<计数($ baseArr); $ I ++){
        / *如果(in_array($ baseArr [$ i],$ ARR)){
            array_push($ sortedArr,$ baseArr [$ i]);
        } * /        的foreach($改编为$ VAL){
            $检查=重置(爆炸('/',$ VAL));            如果(strpos($ VAL,$ baseArr [$ i])=== 0){
                array_push($ sortedArr,$ VAL);
            }
        }
    }    返回$ sortedArr;
}

Lets say, I have an array like this:

$arr = array('M', '38', '37', '3XL', 'XL', '39', 'L', 'S', '36', '41', '40', 'XXL');

(its array with available sizes of shoes for current item that customer is going to order)

How to sort it ascending (first alpha-sizes: S, M, L, XL, XXL, 3XL; and then numeric-sizes: 36, 37, 38, 39, 40, 41), so I will get array:

$res = array('S', 'M', 'L', 'XL', 'XXL', '3XL', '36', '37', '38', '39', '40', '41');

Is there some function to do that?

解决方案

If sizes are all defined, then you can have a $baseArr containing all valid sizes and sort the current arr based on that

function sortSizeArr($arr) {
    $baseArr = array('S', 'M', 'L', 'XL', 'XXL', '3XL', '36', '37', '38', '39', '40', '41');
    $sortedArr = array();
    for($i = 0; $i < count($baseArr); $i++) {
        if(in_array($baseArr[$i], $arr))
            array_push($sortedArr, $baseArr[$i]);
    }
    return $sortedArr;
}

Test:

$sizes = array('M', '38', 'S', '36', '41', '40', 'XXL');
print_r(sortSizeArr($sizes));

Array ( [0] => S [1] => M [2] => XXL [3] => 36 [4] => 38 [5] => 40 [6] => 41 )

EDITED by Legionar: I am calling this function, only if there are alpha-sizes, without numerical-sizes. Some sizes are f.e. M/5, L/6, XL/7, XXL/8, so I changed little bit your function. This helped me, thanks:

function sortSizeArr($arr) {
    $baseArr = array('XXS', 'XS', 'S', 'M', 'L', 'XL', 'XXL', 'XXXL', '3XL');

    $sortedArr = array();

    for ($i = 0; $i < count($baseArr); $i++) {
        /*if (in_array($baseArr[$i], $arr)) {
            array_push($sortedArr, $baseArr[$i]);
        }*/

        foreach ($arr as $val) {
            $check = reset(explode('/', $val));

            if (strpos($val, $baseArr[$i]) === 0) {
                array_push($sortedArr, $val);
            }
        }
    }

    return $sortedArr;
}

这篇关于如何排序特定的过滤器的阵列?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆