程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php對多維數組的某個鍵值排序方法

php對多維數組的某個鍵值排序方法

編輯:關於PHP編程

       php多維數組排序可以用array_multisort() 函數來處理,array_multisort() 函數可以用來一次對多個數組進行排序,或者根據某一維或多維對多維數組進行排序,關聯(string)鍵名保持不變,但數字鍵名會被重新索引

      排序順序標志:

      SORT_ASC - 按照上升順序排序

      SORT_DESC - 按照下降順序排序

      排序類型標志:

      SORT_REGULAR - 將項目按照通常方法比較

      SORT_NUMERIC - 將項目按照數值比較

      SORT_STRING - 將項目按照字符串比較

      例子 1. 對多個數組排序

     代碼如下  

    <?php
    $ar1 = array("10", 100, 100, "a");
    $ar2 = array(1, 3, "2", 1);
    array_multisort($ar1, $ar2);

    var_dump($ar1);
    var_dump($ar2);
    ?>

      本例中經過排序後,第一個數組將包含 "10","a",100,100。第二個數組將包含 1,1,"2",3。第二個數組中的項目順序完全和第一個數組中相應的項目(100 和 100)順序一致。

      但是這些都不可以指定由那個鍵值進行排名了,下面我就整理了幾個函數算法都不錯。

      示例代碼

     代碼如下  

    /**
     * 對多位數組進行排序
     * @param $multi_array 數組
     * @param $sort_key需要傳入的鍵名
     * @param $sort排序類型
     */
    function multi_array_sort($multi_array, $sort_key, $sort = SORT_DESC) {
    if (is_array($multi_array)) {
    foreach ($multi_array as $row_array) {
    if (is_array($row_array)) {
    $key_array[] = $row_array[$sort_key];
    } else {
    return FALSE;
    }
    }
    } else {
    return FALSE;
    }
    array_multisort($key_array, $sort, $multi_array);
    return $multi_array;
    }

      例子二

     代碼如下  

     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[] = $arr[$k];
    }

    return $new_array;
    }

      例子3

     代碼如下  

    /*
    function:二維數組按指定的鍵值排序
    author:www.111cn.net
    */
    function array_sort($array,$keys,$type='asc'){
    if(!isset($array) || !is_array($array) || empty($array)){
    return '';
    }
    if(!isset($keys) || trim($keys)==''){
    return '';
    }
    if(!isset($type) || $type=='' || !in_array(strtolower($type),array('asc','desc'))){
    return '';
    }
    $keysvalue=array();
    foreach($array as $key=>$val){
    $val[$keys] = str_replace('-','',$val[$keys]);
    $val[$keys] = str_replace(' ','',$val[$keys]);
    $val[$keys] = str_replace(':','',$val[$keys]);
    $keysvalue[] =$val[$keys];
    }
    asort($keysvalue); //key值排序
    reset($keysvalue); //指針重新指向數組第一個
    foreach($keysvalue as $key=>$vals) {
    $keysort[] = $key;
    }
    $keysvalue = array();
    $count=count($keysort);
    if(strtolower($type) != 'asc'){
    for($i=$count-1; $i>=0; $i--) {
    $keysvalue[] = $array[$keysort[$i]];
    }
    }else{
    for($i=0; $i<$count; $i++){
    $keysvalue[] = $array[$keysort[$i]];
    }
    }
    return $keysvalue;
    }

      例如有下列這樣一個數組:

     代碼如下  

    $array=array(
    0=>array('id'=>8,'username'=>'phpernote'),
    1=>array('id'=>9,'username'=>'com'),
    2=>array('id'=>5,'username'=>'www')
    );

    現在需要將這個二維數組按id升序排列,則:

    array_sort($array,'id','asc');

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved