php 专用数组排序类用法示例

对php专用数组排序的类 ArraySortUtil感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧!

/**
 * php专用数组排序的类 ArraySortUtil
 * @param 
 * @author 编程之家 jb51.cc jb51.cc
 * 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; 
	} 
}
/***   来自编程之家 jb51.cc(jb51.cc)   ***/

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...