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

5年以前  |  阅读数:1079 次  |  编程语言: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程序设计有所帮助。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例