程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP 多維數組排序 保持索引對應關系 巧用 uasort

PHP 多維數組排序 保持索引對應關系 巧用 uasort

編輯:關於PHP編程

實際開發中,多多少少都會遇到數組的排序問題,除了常規的寫簡單的排序算法,PHP 還提供了內置數組排序函數,本次重點分享一下:uasort  使用用戶自定義的比較函數對數組中的值進行排序並保持索引關聯,可排序多維數組,本文重點講解此函數。             uasort 函數   參數類型:bool uasort ( array &$array, callable $cmp_function)   本函數對數組排序並保持索引和單元之間的關聯。   主要用於對那些單元順序很重要的結合數組進行排序。比較函數是用戶自定義的。   成功時返回 TRUE, 或者在失敗時返回 FALSE。       數組排序實例(非class中):   復制代碼  1 /**  2  * 自定義排序函數  3  * @param $param1  4  * @param $param2  5  * @return 0(不移動) 1(正向調換順序) -1(逆向調換順序)  6  */  7   8 function my_sort($param1, $param2){  9     if($param1 == $param2) return 0; 10     else return $param1 > $param2 ? 1 : -1; 11 } 12  13 $arr = array( 14             'a'=>'20', 15             'b'=>'1', 16             'c'=>'10', 17             'd'=>'5', 18             'e'=>'21', 19             'f'=>'4', 20             'g'=>'3', 21         ); 22  23 uasort($arr, 'my_sort'); 24  25 var_dump($arr); 26  27 /*輸出值 28 array (size=7) 29   'b' => string '1' (length=1) 30   'g' => string '3' (length=1) 31   'f' => string '4' (length=1) 32   'd' => string '5' (length=1) 33   'c' => string '10' (length=2) 34   'a' => string '20' (length=2) 35   'e' => string '21' (length=2) 36 */ 復制代碼     多維數組排序實例(非class中):       復制代碼 /**  * 自定義排序函數  * @param $param1  * @param $param2  * @return 0(不移動) 1(正向調換順序) -1(逆向調換順序)  */   function my_sort($param1, $param2){     if($param1['value'] == $param2['value']) return 0;     else return $param1['value'] > $param2['value'] ? 1 : -1; }   $arr = array(             'a'=>array('key'=>'定義1', 'value'=>'20'),             'b'=>array('key'=>'定義2', 'value'=>'1'),             'c'=>array('key'=>'定義3', 'value'=>'10'),             'd'=>array('key'=>'定義4', 'value'=>'5'),             'e'=>array('key'=>'定義5', 'value'=>'21'),             'f'=>array('key'=>'定義6', 'value'=>'4'),             'g'=>array('key'=>'定義7', 'value'=>'3'),         );   uasort($arr, 'my_sort');   var_dump($arr);   /*輸出值 array (size=7)   'b' =>      array (size=2)       'key' => string '定義2' (length=7)       'value' => string '1' (length=1)   'g' =>      array (size=2)       'key' => string '定義7' (length=7)       'value' => string '3' (length=1)   'f' =>      array (size=2)       'key' => string '定義6' (length=7)       'value' => string '4' (length=1)   'd' =>      array (size=2)       'key' => string '定義4' (length=7)       'value' => string '5' (length=1)   'c' =>      array (size=2)       'key' => string '定義3' (length=7)       'value' => string '10' (length=2)   'a' =>      array (size=2)       'key' => string '定義1' (length=7)       'value' => string '20' (length=2)   'e' =>      array (size=2)       'key' => string '定義5' (length=7)       'value' => string '21' (length=2) */ 復制代碼             class中排序,為了方便以二維數組為例:   uasort($arr1, array($this, 'public_my_sort'));   uasort($arr2, array('self', 'self_my_sort'));   復制代碼 class myClassSort{          /**      * 排序主方法      * @param $arr1  self靜態排序      * @param $arr2  this排序      * @return 排序後的數組      */     public function main($arr1 = array(), $arr2 = array()){              uasort($arr1, array($this, 'public_my_sort'));                  uasort($arr2, array('self', 'self_my_sort'));                  return array('arr1'=>$arr1, 'arr2'=>$arr2);          }          /**      * 自定義排序函數      * @param $param1      * @param $param2      * @return 0(不移動) 1(正向調換順序) -1(逆向調換順序)      */     private static function self_my_sort($param1, $param2){         if($param1['value'] == $param2['value']) return 0;         else return $param1['value'] > $param2['value'] ? 1 : -1;     }               //同上     public function public_my_sort($param1, $param2){         if($param1['value'] == $param2['value']) return 0;         else return $param1['value'] > $param2['value'] ? 1 : -1;     }      }   $arr = array(             'a'=>array('key'=>'定義1', 'value'=>'20'),             'b'=>array('key'=>'定義2', 'value'=>'1'),             'c'=>array('key'=>'定義3', 'value'=>'10'),             'd'=>array('key'=>'定義4', 'value'=>'5'),             'e'=>array('key'=>'定義5', 'value'=>'21'),             'f'=>array('key'=>'定義6', 'value'=>'4'),             'g'=>array('key'=>'定義7', 'value'=>'3'),         );          $myClassSort = new myClassSort();   var_dump($myClassSort->main($arr, $arr));   /*輸出結果同以上實例*/ 復制代碼         類似函數擴展      array_multisort 對多個數組或多維數組進行排序,但是最終填入使用的還是具體一維數組      arsort  對一維數組進行逆向排序並保持索引關系,保持索引對應關系      asort  對一維數組進行正向排序並保持索引關系,保持索引對應關系      krsort  對數組按照鍵名逆向排序,保持索引對應關系      ksort  對數組按照鍵名正向排序,保持索引對應關系      natcasesort  用“自然排序”算法對一維數組進行不區分大小寫字母的排序,可以用來排序數組內容中字母數字混合的情況,保持索引對應關系      natsort  用“自然排序”算法對一維數組排序,區分大小寫字母,可以用來排序數組內容中字母數字混合的情況,保持索引對應關系      rsort  對一維數組逆向排序,不保持索引對應關系      sort  對一維數組正向排序,不保持索引對應關系      uasort  使用用戶自定義的比較函數對數組中的值進行排序並保持索引關聯,可排序多維數組,本文重點講解此函數      uksort  使用用戶自定義的比較函數對數組中的鍵名進行排序      usort  使用用戶自定義的比較函數對數組中的值進行排序,不保持索引關聯    

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