很多时候,我们从数据库中取出我们要的数据后,并不是就完成了工作,更多的我们需要对数据进行遍历处理等,这时候我们从数据库中获取数据时的排序可能就被打乱了, 需要对数组重新排序,下面就写写汇总到的对一维和二维数组进行重新排序的方法:
一维数组:使用php自带的排序函数进行排序即可
sort() //以升序对数组排序
rsort() //以降序对数组排序
asort() //根据值,以升序对关联数组进行排序
ksort() //根据键,以升序对关联数组进行排序
arsort() //根据值,以降序对关联数组进行排序
krsort() //根据键,以降序对关联数组进行排序
对于二维数组,一维数组使用的排序函数就不太适用了,不能直接对二维数组中的值进行排序,所以需要用到下面的方法,用到的是php自带的array_multisort()
函数:
首先看看php手册对这个函数的说明:
array_multisort ( $array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $... ]]] )
参数说明:
array1
要排序的 array。
array1_sort_order
之前 array 参数要排列的顺序。 SORT_ASC 按照上升顺序排序, SORT_DESC 按照下降顺序排序。
此参数可以和 array1_sort_flags 互换,也可以完全删除,默认是 SORT_ASC 。
array1_sort_flags
为 array 参数设定选项:
排序类型标志:
SORT_REGULAR - 将项目按照通常方法比较(不修改类型)
SORT_NUMERIC - 按照数字大小比较
SORT_STRING - 按照字符串比较
SORT_LOCALE_STRING - 根据当前的本地化设置,按照字符串比较。 它会使用 locale 信息,可以通过 setlocale() 修改此信息。
SORT_NATURAL - 以字符串的”自然排序”,类似 natsort()
SORT_FLAG_CASE - 可以组合 (按位或 OR) SORT_STRING 或者 SORT_NATURAL 大小写不敏感的方式排序字符串。
参数可以和 array1_sort_order 交换或者省略,默认情况下是 SORT_REGULAR。
…
可选的选项,可提供更多数组,跟随在 sort order 和 sort flag 之后。 提供的数组和之前的数组要有相同数量的元素。 换言之,排序是按字典顺序排列的。
那么到我们这里,思路就是:1.先生成一个以排序字段的值为值的新数组,对新数组按照我们要求进行排序,然后将原有数组与新数组对应,按照通常序进行排序。代码如下:
/**
* 对二维数组重新排序
* @param $arrays 目标排序函数
* @param $sort_key 排序字段
* @param int $sort_order 排序顺序
* @param int $sort_type 排序类型
* @return bool
*/
function my_sort($arrays,$sort_key,$sort_order=SORT_ASC,$sort_type=SORT_REGULAR ){
if(is_array($arrays)){
foreach ($arrays as $array){ //对二维数组进行一次遍历
if(is_array($array)){
$key_arrays[] = $array[$sort_key]; //取排序字段的值组成一个新数组
}else{
return false;
}
}
}else{
return false;
}
array_multisort($key_arrays,$sort_order,$sort_type,$arrays);
return $arrays;
}