使用PHP中array_multisort() 函數進行多維陣列排序的實現

來源:互聯網
上載者:User
PHP中數組的排序有多種方法可以實現,這篇文章給大家分享的是使用PHP中array_multisort() 函數進行多維陣列排序的實現,以及通過自訂函數進行多維陣列的排序。

用PHP內建array_multisort函數排序

<?php    $data = array();    $data[] = array('volume' => 67, 'edition' => 2);    $data[] = array('volume' => 86, 'edition' => 1);    $data[] = array('volume' => 85, 'edition' => 6);    $data[] = array('volume' => 98, 'edition' => 2);    $data[] = array('volume' => 86, 'edition' => 6);    $data[] = array('volume' => 67, 'edition' => 7);    // 取得列的列表    foreach ($data as $key => $row)    {        $volume[$key]  = $row['volume'];        $edition[$key] = $row['edition'];    }    array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);    print_r($data);?>

輸出結果:

Array(    [0] => Array        (            [volume] => 98            [edition] => 2        )    [1] => Array        (            [volume] => 86            [edition] => 1        )    [2] => Array        (            [volume] => 86            [edition] => 6        )    [3] => Array        (            [volume] => 85            [edition] => 6        )    [4] => Array        (            [volume] => 67            [edition] => 2        )    [5] => Array        (            [volume] => 67            [edition] => 7        ))

關於array_multisort官方文檔也有比較詳細的說明

二、自訂函數排序1

<?php    $data = array();    $data[] = array('volume' => 67, 'edition' => 2);    $data[] = array('volume' => 86, 'edition' => 1);    $data[] = array('volume' => 85, 'edition' => 6);    $data[] = array('volume' => 98, 'edition' => 2);    $data[] = array('volume' => 86, 'edition' => 6);    $data[] = array('volume' => 67, 'edition' => 7);    // 取得列的列表    foreach ($data as $key => $row)    {        $volume[$key]  = $row['volume'];        $edition[$key] = $row['edition'];    }    $ret = arraySort($data, 'volume', 'desc');    print_r($ret);    /**     * @desc arraySort php二維數組排序 按照指定的key 對數組進行排序     * @param array $arr 將要排序的數組     * @param string $keys 指定排序的key     * @param string $type 排序類型 asc | desc     * @return array     */    function arraySort($arr, $keys, $type = 'asc') {        $keysvalue = $new_array = array();        foreach ($arr as $k => $v){            $keysvalue[$k] = $v[$keys];        }        $type == 'asc' ? asort($keysvalue) : arsort($keysvalue);        reset($keysvalue);        foreach ($keysvalue as $k => $v) {           $new_array[$k] = $arr[$k];        }        return $new_array;    }?>

輸出結果:

Array(    [3] => Array        (            [volume] => 98            [edition] => 2        )    [4] => Array        (            [volume] => 86            [edition] => 6        )    [1] => Array        (            [volume] => 86            [edition] => 1        )    [2] => Array        (            [volume] => 85            [edition] => 6        )    [5] => Array        (            [volume] => 67            [edition] => 7        )    [0] => Array        (            [volume] => 67            [edition] => 2        ))

這個自訂函數與系統函數的一個區別就是:自訂函數只支援針對某一個key的排序,如果要支援多個key的排序需要執行多次; 而系統函數array_multisort可以一次性對多個key且可以指定多個定序,系統函數還是相當強大的,推薦使用系統函數,畢竟是C底層實現的,這裡只是舉例說明如果通過自訂函數來對數組進行排序,當然這個自訂函數也可以繼續擴充來支援更多的定序。在取排名、熱門排行榜、成績等情境中用到的還是非常多的。

三、自訂函數排序2

以下函數是對一個給定的二維數組按照指定的索引值進行排序,先看函數定義:

function array_sort($arr,$keys,$type='asc'){  $keysvalue = $new_array = array(); foreach ($arr as $k=>$v){  $keysvalue[$k] = $v[$keys]; } if($type == 'asc'){  asort($keysvalue); }else{  arsort($keysvalue); } reset($keysvalue); foreach ($keysvalue as $k=>$v){  $new_array[$k] = $arr[$k]; } return $new_array; }

它可以對二維數組按照指定的索引值進行排序,也可以指定升序或降序排序法(預設為升序),用法樣本:

$array = array( array('name'=>'手機','brand'=>'諾基亞','price'=>1050), array('name'=>'膝上型電腦','brand'=>'lenovo','price'=>4300), array('name'=>'剃鬚刀','brand'=>'飛利浦','price'=>3100), array('name'=>'跑步機','brand'=>'三和松石','price'=>4900), array('name'=>'手錶','brand'=>'卡西歐','price'=>960), array('name'=>'液晶電視','brand'=>'索尼','price'=>6299), array('name'=>'雷射印表機','brand'=>'惠普','price'=>1200));$ShoppingList = array_sort($array,'price');print_r($ShoppingList);

上面是對$array這個二維數組按照'price'從低到高的排序。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.