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