php数组排序id取得,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;
}
}
使用范例如下:
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用法实例相关推荐
- php 类常量用法,php类常量用法实例分析
这篇文章主要介绍了php类常量用法,实例分析了php中类常量的概念.特性与相关使用技巧,需要的朋友可以参考下 本文实例讲述了php类常量用法.分享给大家供大家参考.具体如下: '; echo Foo: ...
- python accessiblechildren用法_python类继承用法实例分析
本文实例讲述了python类继承用法.分享给大家供大家参考.具体如下: help('object') # test class Class1(object): """ C ...
- php类常量的特点,php类常量是什么?类常量用法详解
这篇文章主要介绍了php类常量用法,实例分析了php中类常量的概念.特性与相关使用技巧,需要的朋友可以参考下 本文实例讲述了php类常量用法.分享给大家供大家参考.具体如下: 类常量属于类自身,不属于 ...
- php数组排序不要用函数,PHP数组排序函数使用方法
在php中数据排序函数有很多,包括有一维数组排序函数与二维数组排序函数,包括简单sort函数升序排序,rsort降序排列等. php数组排序函数有: sort (&$arr[,fruits] ...
- Handle类的用法
android中Handle类的用法 当我们在处理下载或是其他需要长时间执行的任务时,如果直接把处理函数放Activity的OnCreate或是OnStart中,会导致执行过程中整个Activity无 ...
- python 类可以调用实例变量_python中的实例方法、静态方法、类方法、类变量和实例变量浅析...
注:使用的是Python2.7. 一.实例方法 实例方法就是类的实例能够使用的方法.如下: class Foo: def __init__(self, name): self.name = name ...
- python实例属性与类属性_Python中的类属性和实例属性引发的一个坑-续
上篇文章Python 中的类属性和实例属性,我们探讨了类属性和实例属性引发的一个小坑.总结了类属性和实例属性的区别如下:类属性可以被类和实例调用,实例属性只能被实例调用 类属性不会随着实例的调用而改变 ...
- 27、Python 面向对象(创建类、创建实例对象、访问属性、内置类属性、对象销毁、类的继承、方法重写、基础重载方法、运算符重载、类属性与方法、下划线双下划线)
27Python面向对象(Python2) Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. ...
- php class类的用法详细总结
以下是对php中class类的用法进行了详细的总结介绍,需要的朋友可以过来参考下 一:结构和调用(实例化): class className{} ,调用:$obj = new className(); ...
最新文章
- 永远不要在 MySQL 中使用“utf8”
- Opengl-光照-基本光照-材质(有了材质一个物体才算是完整了)
- 基于vmware服务器虚拟化管理,基于Vmware的服务器虚拟化管理论文.doc
- You can't specify target table '表名' for update……
- ubuntu 输入时弹出剪切板候选项
- python统计字符出现的次数最多的字符_Python统计字符串中出现次数最多的人名
- LiveVideoStackCon深圳-服务端的任务越来越重
- SAP Spartacus B2B Org Unit树状结构的加载机制
- 最小二乘法以及RANSAC(随机采样一致性)思想及实现
- linux编译静态库的头文件,条件编译,头文件,静态库,共享库与多文件编程
- APP设计灵感|仪表盘这样设计,所有信息一目了然!
- 转换时间格式24小时_昼夜节律|来认识下你身体24小时的时间表
- 项目中js文件修改后浏览器不能及时更新的解决办法
- 在Windows上搭建Go开发环境
- Eclipse中Maven WEB工程tomcat调试
- kubernetes视频教程笔记 (35)-使用Helm部署metrics-server
- GAMES101投影矩阵推导详解和分析
- 软考-中级-网络工程师-知识点个人总结(八)
- 【论文笔记】Don’t Stop Pretraining: Adapt Language Models to Domains and Tasks
- 什么是随机存取_内存和存储器有什么区别?