本文实例讲述了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
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我