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

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

  **   * ArraySortUtil is a array sort utility, you can extends the sorting engine.   *   * @version 0.1   * @package utility.sort   */  class ArraySortUtil  {   static function uasort($unsort, $fields)   {    if ( !is_array($unsort) || sizeof($unsort) <= 0 ) return $unsort;    $sorted = uasortEngine::uasort($unsort, $fields);    return $sorted;   }   static function multisort($unsort, $fields)   {    if ( !is_array($unsort) || sizeof($unsort) <= 0 ) return $unsort;    $sorted = multisortEngine::multisort($unsort, $fields);    return $sorted;   }  }  class multisortEngine  {   static function multisort($unsort, $fields)   {    $sorted = $unsort;    if (is_array($unsort))    {     $loadFields = array();     foreach($fields as $sortfield)     {      $loadFields["field"][] = array(          "name" => $sortfield["field"],          "order" => $sortfield["order"],          "nature" => $sortfield["nature"],          "caseSensitve" => $sortfield["caseSensitve"]      );      $loadFields["data"][$field["field"]] = array();     }     // Obtain a list of columns     foreach ($sorted as $key => $row) {      foreach($loadFields["field"] as $field) {       $value = $row[$field["name"]];       $loadFields["data"][$field["name"]][$key] = $value;      }     }     $parameters = array();     foreach($loadFields["field"] as $sortfield) {      $array_data = $loadFields["data"][$sortfield["name"]];      $caseSensitve = ( $sortfield["caseSensitve"] == null ) ? $sortfield["caseSensitve"] : false;      if (!$caseSensitve) $array_data = array_map('strtolower', $array_data);      $parameters[] = $array_data;      if ( $sortfield["order"] != null ) $parameters[] = ( $sortfield["order"] ) ? SORT_DESC : SORT_ASC;      if ( $sortfield["nature"] != null ) $parameters[] = ( $sortfield["nature"] ) ? SORT_REGULAR : SORT_STRING;     }     $parameters[] = &$sorted;     call_user_func_array("array_multisort", $parameters);    }    return $sorted;   }  }  class uasortEngine  {   static private $caseSensitve = false;   static private $sortfields = array();   static private $sortorder = true;   static private $nature = false;   static private function uasort_callback(&$a, &$b)   {    foreach(self::$sortfields as $sortfield)    {     $_field = $sortfield["field"];     $_order = isset($sortfield["order"]) ? $sortfield["order"] : self::$sortorder;     $_caseSensitve = isset($sortfield["caseSensitve"]) ? $sortfield["caseSensitve"] : self::$caseSensitve;     $_nature = isset($sortfield["nature"]) ? $sortfield["nature"] : self::$nature;     if ($_field != "")     {      $retval = 0;      if ($_nature)      {       if ($_caseSensitve)       {        $compare = strnatcmp($a[$_field], $b[$_field]);       }       else       {        $compare = strnatcasecmp($a[$_field], $b[$_field]);       }      }      else      {       if ($_caseSensitve)       {        $compare = strcmp($a[$_field], $b[$_field]);       }       else       {        $compare = strcasecmp($a[$_field], $b[$_field]);       }      }      if ($compare !== 0 && !$_order) $compare = ($compare > 0) ? -1 : 1;     }     if ($compare !== 0) break;    }    return $compare;   }   static function uasort($unsort, $fields)   {    self::$sortfields = $fields;    $sorted = $unsort;    uasort($sorted, array('uasortEngine', 'uasort_callback'));    return $sorted;   }  }

使用范例如下:

  <?php  require_once('class.ArraySortUtil.php');  // declare test data  $assetData[] = array("id" => 1, "category"=>"Hardware", "subcategory"=>"Personal Computer", "supplier" => "DELL", "particular"=>"Vostro 1320", "purchase_price"=>2300, "other_charges"=>500);  $assetData[] = array("id" => 2, "category"=>"Hardware", "subcategory"=>"Personal Computer", "supplier" => "DELL", "particular"=>"Vostro 1420", "purchase_price"=>2500, "other_charges"=>0);  $assetData[] = array("id" => 3, "category"=>"Hardware", "subcategory"=>"Laptop", "supplier" => "DELL", "particular"=>"Vostro 1520", "purchase_price"=>4500, "other_charges"=>100);  $assetData[] = array("id" => 4, "category"=>"Hardware", "subcategory"=>"Laptop", "supplier" => "Acer", "particular"=>"Apire One", "purchase_price"=>2500, "other_charges"=>200);  $assetData[] = array("id" => 5, "category"=>"Furniture", "subcategory"=>"Table", "supplier" => "CHEN", "particular"=>"Manager Table", "purchase_price"=>1000, "other_charges"=>0);  $assetData[] = array("id" => 6, "category"=>"Furniture", "subcategory"=>"Table", "supplier" => "CHEN", "particular"=>"Staff Table", "purchase_price"=>500, "other_charges"=>0);  $assetData[] = array("id" => 7, "category"=>"Furniture", "subcategory"=>"Chair", "supplier" => "CHEN", "particular"=>"Staff Chair", "purchase_price"=>500, "other_charges"=>0);  $sorted = ArraySortUtil::multisort($assetData, array(    array("field"=>"category"),    array("field"=>"subcategory", "order" => true) // desc   ));  echo "<h1>multisort:result</h1>";  echo "<pre>";   print_r($sorted);  echo "</pre>";  $sorted = ArraySortUtil::uasort($assetData, array(    array("field"=>"category"),    array("field"=>"subcategory", "order" => true) // desc   ));  echo "<h1>uasort:result</h1>";  echo "<pre>";   print_r($sorted);  echo "</pre>";

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

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

郑重声明:本网站发布的内容(图片、视频和文字)以及用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服