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


Posted in PHP onApril 03, 2015

本文实例讲述了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 相关文章推荐
用PHP函数解决SQL injection
Dec 09 PHP
PHP 函数学习简单小结
Jul 08 PHP
div li的多行多列 无刷新分页示例代码
Oct 16 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
Jun 26 PHP
php5.4以下版本json不支持不转义内容中文的解决方法
Jan 13 PHP
php中JSON的使用方法
Apr 30 PHP
php Session无效分析资料整理
Nov 29 PHP
PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
Jan 13 PHP
phpStudy 2016 使用教程详解(支持PHP7)
Oct 18 PHP
PHP+Ajax简单get验证操作示例
Mar 02 PHP
Laravel等框架模型关联的可用性浅析
Dec 15 PHP
PHP中SESSION过期设置
Mar 09 PHP
Win7下手动安装apache2.2、php5.4笔记
Apr 03 #PHP
PHP中返回引用类型的方法
Apr 03 #PHP
PHP中应该避免使用同名变量(拆分临时变量)
Apr 03 #PHP
PHP5多态性与动态绑定介绍
Apr 03 #PHP
php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总
Apr 03 #PHP
Windows下编译PHP5.4和xdebug全记录
Apr 03 #PHP
Centos下升级php5.2到php5.4全记录(编译安装)
Apr 03 #PHP
You might like
Oracle 常见问题解答
2006/10/09 PHP
php中serialize序列化与json性能测试的示例分析
2013/04/27 PHP
PHP的error_reporting错误级别变量对照表
2014/07/08 PHP
php实现在多维数组中查找特定value的方法
2015/07/29 PHP
PHP信号量基本用法实例详解
2016/02/12 PHP
简单谈谈PHP中strlen 函数
2016/02/27 PHP
php图片上传类 附调用方法
2016/05/15 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
PHP回调函数简单用法示例
2019/05/08 PHP
如何在PHP中使用数组
2020/06/09 PHP
javascript算法学习(直接插入排序)
2011/04/12 Javascript
基于jQuery实现的QQ表情插件
2015/08/25 Javascript
JS动态改变浏览器标题的方法
2016/04/06 Javascript
老生常谈javascript变量的命名规范和注释
2016/09/29 Javascript
nodejs实现连接mongodb数据库的方法示例
2018/03/15 NodeJs
深入解析koa之中间件流程控制
2019/06/17 Javascript
vue-cli配置flexible过程详解
2019/07/04 Javascript
Vue是怎么渲染template内的标签内容的
2020/06/05 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
python检测远程服务器tcp端口的方法
2015/03/14 Python
Python NumPy库安装使用笔记
2015/05/18 Python
使用C#配合ArcGIS Engine进行地理信息系统开发
2016/02/19 Python
Django使用httpresponse返回用户头像实例代码
2018/01/26 Python
Python cookbook(数据结构与算法)实现优先级队列的方法示例
2018/02/18 Python
Python实现读取字符串按列分配后按行输出示例
2018/04/17 Python
Python 调用 Outlook 发送邮件过程解析
2019/08/08 Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
2020/02/25 Python
PyQt5+Pycharm安装和配置图文教程详解
2020/03/24 Python
canvas 绘图时位置偏离的问题解决
2020/09/16 HTML / CSS
bonprix匈牙利:女士、男士和儿童服装
2019/07/19 全球购物
Harrods英国:世界领先的奢侈品百货商店
2020/09/23 全球购物
三好学生自我鉴定
2013/12/17 职场文书
学校通报表扬范文
2015/05/04 职场文书
2016党校学习心得体会范文
2016/01/07 职场文书
Java后台生成图片的完整步骤
2021/08/04 Java/Android
用Python爬取英雄联盟的皮肤详细示例
2021/12/06 Python