zoukankan      html  css  js  c++  java
  • array_multisort array_merge 排序

    前段时间遇到一个排序问题,大致是这样的:
    $demo = array(
            0        =>        array(
                    'name'        => 'yangyanfei',
                    'sex'                => 'man',
                    'age'        => 22,                        
            ),
            1        => array(
                    'name'        => 'yangyanfei',
                    'sex'                => 'man',
                    'age'        => 25,                        
            ),
            2        => array(
                    'name'        => 'yangyanfei',
                    'sex'                => 'man',
                    'age'        => 26,                        
            ),
    )
    //现在我们有这样一个需求,需要根据内层数组的age从大到小或者从小到大排序......
    这个东西,跟我的第一反应,自己做排序吧,各种排序算法~~
    突然想翻翻手册里面是否有这样的方法,为你提供好的内置方法~~
    结果还真有这样的方法,就是array_multisort啦~~
    想深研究的童鞋们可以去看看手册哦~
    $tempArr = array(); //用户排序的临时数组
    foreach($demo as $k=>$v){
            $tempArr[$k] = $v['age'];
    }
    array_multisort($tempArr,SORT_DESC,$demo); //第二个参数传排序规则
    这里$demo即按照age已经从大到小排好了,说下啦~此函数会直接影响$demo 无需重新赋值~~~
    像这样的业务很多吧,比如 我们一个数据列表,对内层数组的一个特定字段的值排序,又由于某些原因不符合你的业务需求,这时候那些底层helper又不能随便乱改,这个时候,可以考虑下这个内置方法 ~~~~~~

    最后给一个小提示~~
    array_merge这个家伙太坏了,如果你合并的索引式数组,小心点,它会把你的key干掉的,key会重新索引,这个时候 不妨试下 +
    比如 
    $arr = array(20=>'11',41=>'yang',12=>'yanfei');
    $arrNew = array(21=>'1asdf1',66=>'yang',14=>'yangyanfeiyangyanfei');
    $demo = array($arr,$arrNew); //这样的话,它会把你的数组key清除~~小心点~~~~
    这个时候你不妨试试  $demo = $arr + $arrNew; //单纯的把数组连接起来~~~不会清除键值对应关系~~~~~

    exit();

  • 相关阅读:
    POJ 1300 Open Door
    POJ 2230 Watchcow
    codevs 1028 花店橱窗布置
    codevs 1021 玛丽卡
    codevs 1519 过路费
    codevs 3287 货车运输
    codevs 3305 水果姐逛水果街二
    codevs 1036 商务旅行
    codevs 4605 LCA
    POJ 1330 Nearest Common Ancestors
  • 原文地址:https://www.cnblogs.com/huangtaozi/p/3208238.html
Copyright © 2011-2022 走看看