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

前端技术 2023/09/02 PHP

本文实例讲述了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程序设计有所帮助。

本文地址:https://www.stayed.cn/item/5941

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。