PHP二維陣列排序(感謝滔哥lvtao.net)

OldBoy~發表於2017-05-17

滔哥原創

/* 
                   _ooOoo_ 
                  o8888888o 
                  88" . "88 
                  (| -_- |) 
                  O\  =  /O 
               ____/`---'\____ 
             .'  \\|     |//  `. 
            /  \\|||  :  |||//  \ 
           /  _||||| -:- |||||-  \ 
           |   | \\\  -  /// |   | 
           | \_|  ''\---/''  |   | 
           \  .-\__  `-`  ___/-. / 
         ___`. .'  /--.--\  `. . __ 
      ."" '<  `.___\_<|>_/___.'  >'"". 
     | | :  `- \`.;`\ _ /`;.`/ - ` : | | 
     \  \ `-.   \_ __\ /__ _/   .-` /  / 
======`-.____`-.___\_____/___.-`____.-'====== 
                   `=---=' 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
         佛祖保佑       永無BUG 
*/   
array(array(),array());

$arr1=array(array('itemid'=> 226,'title'=> '四中附近有一大廳出租','edittime'=> 1409387090),
            array('itemid'=> 311,'title'=> '四中西鄰文華園小區樓房出租','edittime'=> 1409272174),
            array('itemid'=> 312,'title'=> '四中西鄰文華園小區樓房出租2','edittime'=> 1409272074),
            array('itemid'=> 313,'title'=> '四中西鄰文華園小區樓房出租3','edittime' => 1409271174)
        );

$arr2=array(array('itemid'=> 226,'title'=> '四中附近有一大廳出租12','edittime'=> 1409287090),
            array('itemid'=> 314,'title'=> '四中西鄰文華園小區樓房出租12','edittime'=> 1409172174),
            array('itemid'=> 310,'title'=> '四中西鄰文華園小區樓房出租312','edittime' => 1309271174)
        );
$b=mylist(array_merge($arr1,$arr2));

print_r($b);

function mylist($array){
    $arr=array();
    $list=array();
    foreach($array as $v){
        $arr[$v['itemid']]=$v['edittime'];
        $list[$v['itemid']]=$v;
    }
    arsort($arr);
    $newarr=array();
    foreach($arr as $k=>$v){
        $newarr[]=$list[$k];
    }
    return $newarr;
}

本人需求更改

/**
 * 按照指定鍵名對二維陣列排序
 * $array  傳過來的陣列
 * $key     指定的鍵名
 * $type    指定的排序型別  asc  升序,desc 降序
 */
  function orderArray($array = array() ,$key = 'id', $type = 'asc')
  {
        $arr        = array();
        $list       = array();
        foreach($array as $v){
            $arr[$v[$key]]       = $v[$key];
            $list[$v[$key]]      = $v;
        }
        if($type == 'asc'){
            asort($arr);
        }else{
            arsort($arr);
        }
        
        $newarr     =array();
        foreach($arr as $k => $v){
            $newarr[]       =$list[$k];
        }
        return $newarr;
    }
 /**
    * 氣泡排序,如果二維陣列中的元素不一致,可以使用次方法  
    *  $arr  要排序的陣列
    *  $key  指定要排序的欄位
    */
    function interpretSort( $arr = array() ,$key = 'order')
    {
        $count          = count($arr);
        if( $count <= 0 ) return false;
        for( $i = 0; $i < $count; $i ++ ){
                for( $j = $count - 1; $i < $j; $j --){
                        if( $arr[$j][$key] < $arr[$j-1][$key] ){
                                //交換相鄰位置的值
                                $tmp         = $arr[$j];
                                $arr[$j]     = $arr[$j-1];
                                $arr[$j-1]  = $tmp;
                        }
                }
        }
        return $arr;
    }

簡單的二維陣列按照指定欄位排序

echo "<pre>";
    $arr=array(
        'aaa'=>array(
            'age'=>32,
            'name'=>'張三'
        ),
        'bbb'=>array(
            'age'=>12,
            'name'=>'李四'
        ),
        'ccc'=>array(
            'age'=>25,
            'name'=>'趙六'
        )
    );
    function paixu($a,$b){
        return $b['age']-$a['age'];
    }
    uasort($arr,'paixu');
    print_r($arr);

要排序的key 有重複值

 

function RorderArray( $array = [], $key = '', $order = 'asc' ){
$sort = $order == 'asc' ? 'SORT_ASC' : 'SORT_DESC';
$arrSort = array(); 
foreach($array AS $uniqid => $row){ 
  foreach($row AS $k=>$value){ 
    $arrSort[$k][$uniqid] = $value; 
  } 
}
array_multisort($arrSort[$key], constant($sort), $array); 
  return $array;
} 

 

相關文章