bool array_multisort ( array $ar1 [, mixed $arg [, mixed $... [, array $... ]]] ),成功返回true,失败返回false
使用说明:
关联(string)键名保持不变,但数字键名会被重新索引。
输入数组被当成一个表的列并以行来排序——这类似于 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话就按照下一个输入数组中相应值的大小来排序,依此类推。——这句话是理解此函数用法的关键。
第一个参数必须是一个数组。接下来的每个参数可以是数组或者是下面列出的排序标志。
排序顺序标志:
■SORT_ASC - 按照上升顺序排序 ■SORT_DESC - 按照下降顺序排序
排序类型标志:
■SORT_REGULAR - 将项目按照通常方法比较 ■SORT_NUMERIC - 将项目按照数值比较 ■SORT_STRING - 将项目按照字符串比较
每个数组之后不能指定两个同类的排序标志。每个数组后指定的排序标志仅对该数组有效 - 在此之前为默认值 SORT_ASC 和 SORT_REGULAR。
PHP对一维数组排序,可能大家都很清楚,主要有以下几个:
sort() 对数组排序 rsort() 对数组逆向排序 asort() 保持索引关系 arsort() 逆向排序,并保持索引关系 ksort() 按键名排序 krsort() 按键名逆向排序 usort() 使用用户自定义的函数对数组进行排序 uksort() 使用用户自定义的函数对数组键名进行排序 natsort() 用自然排序算法对数组排序 natcasesort() 用自然排序算法对数组排序,不区分大小写 如果是多维数组或者对多个数组排序的话,PHP也提供了一个函数:array_multisort()
案例一:对多个数组进行排序
/** * 多个数组排序 */ $arr1 = array(1,9,5); $arr2 = array(6,2,4); $arr3 = array(3,7,8); array_multisort($arr1,$arr2,$arr3); print_r($arr1); print_r($arr2); print_r($arr3);
运行看到结果是:
Array ( [0] => 1 [1] => 5 [2] => 9 ) Array ( [0] => 6 [1] => 4 [2] => 2 ) Array ( [0] => 3 [1] => 8 [2] => 7 )
很明显,array_multisort会先按第一个数组(想像成列)排序,如果第一个数组(列)的值相同,则按第二个数组(列)排序,一次类推。
案例二:对多维数组排序(二维数组为例)
/** * 多维数组排序 */ $arr = array( array('id'=>1,'data'=>'a'), array('id'=>3,'data'=>'c'), array('id'=>2,'data'=>'b'), array('id'=>2,'data'=>'a') ); $id = $data = array(); foreach($arr as $key => $value){ $id[$key] = $value['id']; $data[$key] = $value['data']; } array_multisort($id, SORT_ASC, $data, SORT_DESC, $arr); print_r($arr);
结果很显然:
Array ( [0] => Array ( [id] => 1 [data] => a ) [1] => Array ( [id] => 2 [data] => b ) [2] => Array ( [id] => 2 [data] => a ) [3] => Array ( [id] => 3 [data] => c ) )
你可以对array_multisort()稍稍封装下更好用,如我:
function sort_array($array, $keyid, $order='asc', $type='number') { if(is_array($array)) { foreach($array as $val) { $order_arr[] = $val[$keyid]; } $order = ($order == 'asc') ? SORT_ASC: SORT_DESC; $type = ($type == 'number') ? SORT_NUMERIC: SORT_STRING; array_multisort($order_arr, $order, $type, $array); } }