首页 > 开发 > PHP > 正文

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

2024-05-04 23:33:52
字体:
来源:转载
供稿:网友

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

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

 

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

使用范例如下:

 

 
  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程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表