dongya8378 2013-05-06 10:35
浏览 41
已采纳

服装尺寸排序数组(多维数组)

My array looks like this:

    Array
     (
     [0] => Array
    (
        [id] => 613
        [kleur] => royalblauw/wit
        [maat] =>  maat XL
        [voorraad] => 100
        [sort] => 0
        [prijs] => 4.1320
    )

[1] => Array
    (
        [id] => 614
        [kleur] => royalblauw/wit
        [maat] =>  maat XXL
        [voorraad] => 100
        [sort] => 1
        [prijs] => 4.1320
    )

[2] => Array
    (
        [id] => 620
        [kleur] => zwart/wit
        [maat] =>  maat XL
        [voorraad] => 100
        [sort] => 2
        [prijs] => 4.1320
    ) 
       etc.etc.

What I want is to sort the array by 'maat' (size). As you can see there are multiple entries with same 'maat'.

I've been trying for hours now, but still not a good result. Ofcourse I've been looking at Stackoverflow, too. This is what I have until now.

Functions:

function cmp($a, $b)
{

$sizes = array(
"116" => 0,
"128" => 1,
"140" => 2,
"152" => 3,
"164" => 4,
"XXS" => 5,
"XS" => 6,
"S" => 7,
"M" => 8,
"L" => 9,
"XL" => 10,
"XXL" => 11,
"XXXL" => 12,
"XXXXL" => 13,
"XXXXXL" => 14
);

$asize = $sizes[$a];
$bsize = $sizes[$b];

if ($asize == $bsize) {
    return 0;
}

return ($asize > $bsize) ? 1 : -1;

}
function aasort (&$array, $key) {
    $sorter=array();
    $ret=array();
    reset($array);
    foreach ($array as $ii => $va) {
        $sorter[$ii]=$va[$key];
    }
    uasort($sorter, "cmp");
    foreach ($sorter as $ii => $va) {
        $ret[$ii]=$array[$ii];
    }
    $array=$ret;
}

And calling the function aasort:

aasort($maatkleur_array,"maat");

Please can you help me. I hope it's clear what I want to achieve.

  • 写回答

3条回答 默认 最新

  • douhao5280 2013-05-06 11:38
    关注

    You want to sort an array of arrays. The parent array don't have a (named) key. uasort perserves the key wich you don't want in your case so use usort in stead:

    error_reporting(E_ALL);
    ini_set('display_errors','on');
    
    function cmp($a, $b)
    {
    
        $sizes = array('s'=>0,'m'=>'1','l'=>2,'xl'=>3);
    
        if ($sizes[$a['maat']] == $sizes[$b['maat']]) {
            return 0;
        }
        return ($sizes[$a['maat']] < $sizes[$b['maat']]) ? -1 : 1;
    }
    
    
    
    $input = array(
    array('id'=>1,'kleur'=>'blauw','maat'=>'xl'),
    array('id'=>2,'kleur'=>'blauw','maat'=>'m'),
    array('id'=>1,'kleur'=>'blauw','maat'=>'s'),
    array('id'=>2,'kleur'=>'blauw','maat'=>'m'),
    array('id'=>3,'kleur'=>'blauw','maat'=>'l')
    );
    
    usort($input, "cmp");
    
    print_r($input);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行