当前位置:首页 > PHP教程 > php类库 > 列表

php专用数组排序类ArraySortUtil用法实例

发布:smiling 来源: PHP粉丝网  添加日期:2021-05-21 11:12:47 浏览: 评论:0 

这篇文章主要介绍了php专用数组排序类ArraySortUtil用法,实例分析了ArraySortUtil实现数组排序的方法与对应使用技巧,需要的朋友可以参考下。

本文实例讲述了php专用数组排序类ArraySortUtil用法,分享给大家供大家参考,具体如下:

  1. ** 
  2.  * ArraySortUtil is a array sort utility, you can extends the sorting engine. 
  3.  * 
  4.  * @version 0.1 
  5.  * @package utility.sort 
  6.  */ 
  7. class ArraySortUtil 
  8.  static function uasort($unsort$fields
  9.  { 
  10.   if ( !is_array($unsort) || sizeof($unsort) <= 0 ) return $unsort
  11.   $sorted = uasortEngine::uasort($unsort$fields); 
  12.   return $sorted
  13.  } 
  14.  static function multisort($unsort$fields
  15.  { 
  16.   if ( !is_array($unsort) || sizeof($unsort) <= 0 ) return $unsort
  17.   $sorted = multisortEngine::multisort($unsort$fields); 
  18.   return $sorted
  19.  } 
  20. class multisortEngine 
  21.  static function multisort($unsort$fields
  22.  { 
  23.   $sorted = $unsort
  24.   if (is_array($unsort)) 
  25.   { 
  26.    $loadFields = array(); 
  27.    foreach($fields as $sortfield
  28.    { 
  29.     $loadFields["field"][] = array
  30.         "name" => $sortfield["field"], 
  31.         "order" => $sortfield["order"], 
  32.         "nature" => $sortfield["nature"], 
  33.         "caseSensitve" => $sortfield["caseSensitve"
  34.     ); 
  35.     $loadFields["data"][$field["field"]] = array(); 
  36.    } 
  37.    // Obtain a list of columns 
  38.    foreach ($sorted as $key => $row) { 
  39.     foreach($loadFields["field"as $field) { 
  40.      $value = $row[$field["name"]]; 
  41.      $loadFields["data"][$field["name"]][$key] = $value
  42.     } 
  43.    } 
  44.    $parameters = array(); 
  45.    foreach($loadFields["field"as $sortfield) { 
  46.     $array_data = $loadFields["data"][$sortfield["name"]]; 
  47.     $caseSensitve = ( $sortfield["caseSensitve"] == null ) ? $sortfield["caseSensitve"] : false; 
  48.     if (!$caseSensitve$array_data = array_map('strtolower'$array_data); 
  49.     $parameters[] = $array_data
  50.     if ( $sortfield["order"] != null ) $parameters[] = ( $sortfield["order"] ) ? SORT_DESC : SORT_ASC; 
  51.     if ( $sortfield["nature"] != null ) $parameters[] = ( $sortfield["nature"] ) ? SORT_REGULAR : SORT_STRING; 
  52.    } 
  53.    $parameters[] = &$sorted
  54.    call_user_func_array("array_multisort"$parameters); 
  55.   } 
  56.   return $sorted
  57.  } 
  58. class uasortEngine 
  59.  static private $caseSensitve = false; 
  60.  static private $sortfields = array(); 
  61.  static private $sortorder = true; 
  62.  static private $nature = false; 
  63.  static private function uasort_callback(&$a, &$b
  64.  { 
  65.   foreach(self::$sortfields as $sortfield
  66.   { 
  67.    $_field = $sortfield["field"]; 
  68.    $_order = isset($sortfield["order"]) ? $sortfield["order"] : self::$sortorder
  69.    $_caseSensitve = isset($sortfield["caseSensitve"]) ? $sortfield["caseSensitve"] : self::$caseSensitve
  70.    $_nature = isset($sortfield["nature"]) ? $sortfield["nature"] : self::$nature
  71.    if ($_field != ""
  72.    { 
  73.     $retval = 0; 
  74.     if ($_nature
  75.     { 
  76.      if ($_caseSensitve
  77.      { 
  78.       $compare = strnatcmp($a[$_field], $b[$_field]); 
  79.      } 
  80.      else 
  81.      { 
  82.       $compare = strnatcasecmp($a[$_field], $b[$_field]); 
  83.      } 
  84.     } 
  85.     else 
  86.     { 
  87.      if ($_caseSensitve
  88.      { 
  89.       $compare = strcmp($a[$_field], $b[$_field]); 
  90.      } 
  91.      else 
  92.      { 
  93.       $compare = strcasecmp($a[$_field], $b[$_field]); 
  94.      } 
  95.     } 
  96.     if ($compare !== 0 && !$_order$compare = ($compare > 0) ? -1 : 1; 
  97.    } 
  98.    if ($compare !== 0) break
  99.   } 
  100.   return $compare
  101.  } 
  102.  static function uasort($unsort$fields
  103.  { 
  104.   self::$sortfields = $fields
  105.   $sorted = $unsort
  106.   uasort($sortedarray('uasortEngine''uasort_callback')); 
  107.   return $sorted
  108.  } 

使用范例如下:

  1. <?php 
  2. require_once('class.ArraySortUtil.php'); 
  3. // declare test data 
  4. $assetData[] = array("id" => 1, "category"=>"Hardware""subcategory"=>"Personal Computer""supplier" => "DELL""particular"=>"Vostro 1320""purchase_price"=>2300, "other_charges"=>500); 
  5. $assetData[] = array("id" => 2, "category"=>"Hardware""subcategory"=>"Personal Computer""supplier" => "DELL""particular"=>"Vostro 1420""purchase_price"=>2500, "other_charges"=>0); 
  6. $assetData[] = array("id" => 3, "category"=>"Hardware""subcategory"=>"Laptop""supplier" => "DELL""particular"=>"Vostro 1520""purchase_price"=>4500, "other_charges"=>100); 
  7. $assetData[] = array("id" => 4, "category"=>"Hardware""subcategory"=>"Laptop""supplier" => "Acer""particular"=>"Apire One""purchase_price"=>2500, "other_charges"=>200); 
  8. $assetData[] = array("id" => 5, "category"=>"Furniture""subcategory"=>"Table""supplier" => "CHEN""particular"=>"Manager Table""purchase_price"=>1000, "other_charges"=>0); 
  9. $assetData[] = array("id" => 6, "category"=>"Furniture""subcategory"=>"Table""supplier" => "CHEN""particular"=>"Staff Table""purchase_price"=>500, "other_charges"=>0); 
  10. $assetData[] = array("id" => 7, "category"=>"Furniture""subcategory"=>"Chair""supplier" => "CHEN""particular"=>"Staff Chair""purchase_price"=>500, "other_charges"=>0); 
  11. $sorted = ArraySortUtil::multisort($assetDataarray
  12.   array("field"=>"category"), 
  13.   array("field"=>"subcategory""order" => true) // desc 
  14.  )); 
  15. echo "<h1>multisort:result</h1>"
  16. echo "<pre>"
  17.  print_r($sorted); 
  18. echo "</pre>"
  19. $sorted = ArraySortUtil::uasort($assetDataarray
  20.   array("field"=>"category"), 
  21.   array("field"=>"subcategory""order" => true) // desc 
  22.  )); 
  23. echo "<h1>uasort:result</h1>"
  24. echo "<pre>"
  25.  print_r($sorted); 
  26. echo "</pre>"

希望本文所述对大家的php程序设计有所帮助。

Tags: php专用数组排序类 ArraySortUtil

分享到: