本文实例讲述了php专用数组排序类ArraySortUtil用法。具体如下:
** * ArraySortUtil is a array sort utility, you can extends the sorting engine. * @version 0.1 * @package utility.sorthtml' target='_blank'>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;}
使用范例如下:
?phprequire_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 = $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 = $assetData[] = array( id = 6, category = Furniture , subcategory = Table , supplier = CHEN , particular = Staff Table , purchase_price = 500, other_charges = $assetData[] = array( id = 7, category = Furniture , subcategory = Chair , supplier = CHEN , particular = Staff Chair , purchase_price = 500, other_charges = $sorted = ArraySortUtil::multisort($assetData, array( array( field = category ), array( field = subcategory , order = true) // descecho h1 multisort:result /h1 echo pre print_r($sorted);echo /pre $sorted = ArraySortUtil::uasort($assetData, array( array( field = category ), array( field = subcategory , order = true) // descecho h1 uasort:result /h1 echo pre print_r($sorted);echo /pre
总结:以上就是本篇文的全部内容,希望能对大家的学习有所帮助。
相关推荐:
PHP实现汉字验证码
php无序树的实现技巧
php流程控制及数学运算
以上就是php基于ArraySortUtil实现数组排序的方法的详细内容,PHP教程
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
新闻热点
疑难解答