本文实例讲述了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;

}

}

使用范例如下:

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 "

multisort:result

";

echo "

";

print_r($sorted);

echo "

";

$sorted = ArraySortUtil::uasort($assetData, array(

array("field"=>"category"),

array("field"=>"subcategory", "order" => true) // desc

));

echo "

uasort:result

";

echo "

";

print_r($sorted);

echo "

";

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

php数组排序id取得,php专用数组排序类ArraySortUtil用法实例相关推荐

  1. php 类常量用法,php类常量用法实例分析

    这篇文章主要介绍了php类常量用法,实例分析了php中类常量的概念.特性与相关使用技巧,需要的朋友可以参考下 本文实例讲述了php类常量用法.分享给大家供大家参考.具体如下: '; echo Foo: ...

  2. python accessiblechildren用法_python类继承用法实例分析

    本文实例讲述了python类继承用法.分享给大家供大家参考.具体如下: help('object') # test class Class1(object): """ C ...

  3. php类常量的特点,php类常量是什么?类常量用法详解

    这篇文章主要介绍了php类常量用法,实例分析了php中类常量的概念.特性与相关使用技巧,需要的朋友可以参考下 本文实例讲述了php类常量用法.分享给大家供大家参考.具体如下: 类常量属于类自身,不属于 ...

  4. php数组排序不要用函数,PHP数组排序函数使用方法

    在php中数据排序函数有很多,包括有一维数组排序函数与二维数组排序函数,包括简单sort函数升序排序,rsort降序排列等. php数组排序函数有: sort  (&$arr[,fruits] ...

  5. Handle类的用法

    android中Handle类的用法 当我们在处理下载或是其他需要长时间执行的任务时,如果直接把处理函数放Activity的OnCreate或是OnStart中,会导致执行过程中整个Activity无 ...

  6. python 类可以调用实例变量_python中的实例方法、静态方法、类方法、类变量和实例变量浅析...

    注:使用的是Python2.7. 一.实例方法 实例方法就是类的实例能够使用的方法.如下: class Foo: def __init__(self, name): self.name = name ...

  7. python实例属性与类属性_Python中的类属性和实例属性引发的一个坑-续

    上篇文章Python 中的类属性和实例属性,我们探讨了类属性和实例属性引发的一个小坑.总结了类属性和实例属性的区别如下:类属性可以被类和实例调用,实例属性只能被实例调用 类属性不会随着实例的调用而改变 ...

  8. 27、Python 面向对象(创建类、创建实例对象、访问属性、内置类属性、对象销毁、类的继承、方法重写、基础重载方法、运算符重载、类属性与方法、下划线双下划线)

    27Python面向对象(Python2) Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. ...

  9. php class类的用法详细总结

    以下是对php中class类的用法进行了详细的总结介绍,需要的朋友可以过来参考下 一:结构和调用(实例化): class className{} ,调用:$obj = new className(); ...

最新文章

  1. 永远不要在 MySQL 中使用“utf8”
  2. Opengl-光照-基本光照-材质(有了材质一个物体才算是完整了)
  3. 基于vmware服务器虚拟化管理,基于Vmware的服务器虚拟化管理论文.doc
  4. You can't specify target table '表名' for update……
  5. ubuntu  输入时弹出剪切板候选项
  6. python统计字符出现的次数最多的字符_Python统计字符串中出现次数最多的人名
  7. LiveVideoStackCon深圳-服务端的任务越来越重
  8. SAP Spartacus B2B Org Unit树状结构的加载机制
  9. 最小二乘法以及RANSAC(随机采样一致性)思想及实现
  10. linux编译静态库的头文件,条件编译,头文件,静态库,共享库与多文件编程
  11. APP设计灵感|仪表盘这样设计,所有信息一目了然!
  12. 转换时间格式24小时_昼夜节律|来认识下你身体24小时的时间表
  13. 项目中js文件修改后浏览器不能及时更新的解决办法
  14. 在Windows上搭建Go开发环境
  15. Eclipse中Maven WEB工程tomcat调试
  16. kubernetes视频教程笔记 (35)-使用Helm部署metrics-server
  17. GAMES101投影矩阵推导详解和分析
  18. 软考-中级-网络工程师-知识点个人总结(八)
  19. 【论文笔记】Don’t Stop Pretraining: Adapt Language Models to Domains and Tasks
  20. 什么是随机存取_内存和存储器有什么区别?

热门文章

  1. 4-2   ADO.NET-查询和检索数据1
  2. 信息学奥赛一本通 2042:【例5.10】稀疏矩阵
  3. 信息学奥赛一本通(1313:【例3.5】位数问题)
  4. Mindis(HDU-6670)
  5. The Cow Lexicon(POJ-3267)
  6. 移动路线(信息学奥赛一本通-T1194)
  7. 高精除(信息学奥赛一本通-T1308)
  8. 5.1.6 UPDATE更新数据
  9. noip2014到2017初赛提高组看程序写结果、完善程序
  10. 硬件测试含软件调试,硬件调试与测试规范.doc