在PHP开发中,我们经常需要对一个数组进行排序操作。如果按照数组中某个字段来进行排序,则能为开发带来很大便利。下面我们将从多个角度详细阐述如何实现这一功能。
一、原理简介
排序本质上就是一种对数据的重组,按照某种方式重新排列原始数据。在PHP中,我们可以使用内置函数sort()来对数组进行排序,也可以通过自定义函数来实现灵活的排序方式。在本文中主要介绍后者的做法。
二、按照某个字段升序排序
如果我们有一个二维数组,如下所示:
$array = array( array('id'=>1,'name'=>'Tom','age'=>20), array('id'=>2,'name'=>'Jerry','age'=>22), array('id'=>3,'name'=>'Alice','age'=>18) );
我们需要按照age字段进行升序排序。
function array_sort($arr,$keys,$type='asc'){ $keysvalue = array(); foreach($arr as $key => $val){ $keysvalue[$key] = $val[$keys]; } if($type == 'asc'){ asort($keysvalue); }else{ arsort($keysvalue); } reset($keysvalue); foreach($keysvalue as $key => $val){ $keysort[$key] = $key; } $new_array = array(); foreach($keysort as $key => $val){ $new_array[$key] = $arr[$val]; } return $new_array; } $new_arr = array_sort($array,'age','asc'); print_r($new_arr);
代码分析:
①首先定义了一个函数array_sort,接收三个参数:待排序的数组,排序的字段,排序方式(升序或降序)。
②在函数内部,创建一个空数组$keysvalue用来存放待排序字段的原始值。
③遍历原数组,将待排序字段的值存储到$keysvalue数组中。
④根据排序方式,在$keysvalue数组中使用asort()或arsort()进行排序。
⑤使用reset()函数将数组指针移动到第一个元素位置。
⑥创建一个$keysort数组,保存排序后的数组的$key(键)信息。
⑦创建一个空数组$new_array,通过遍历$keysort数组按键获取排序后的数组的值。
⑧最后返回排序后的数组$new_array。
三、按照某个字段降序排序
如果我们需要按照某个字段的降序进行排序,则只需要在调用array_sort()函数时将$type参数设置成'desc'即可。
$new_arr = array_sort($array,'age','desc'); print_r($new_arr);
四、按照多个字段排序
有时候我们需要按照多个字段进行排序,可以通过修改array_sort()函数来实现。
function array_sort_multi($arr,$keys){ $sort_arr = array(); foreach($arr as $v){ foreach($keys as $key){ $sort_arr[$key][] = $v[$key]; } } array_multisort($sort_arr[$keys[0]],SORT_DESC,$arr); for($i=1;$i代码分析:
①在函数array_sort_multi()中,我们首先需要将需要排序的字段存储在$sort_arr数组中,使用array_multisort()函数可以对$sort_arr数组进行多列排序。
②此时$sort_arr数组已经是排序后的,按照它进行$data数组的排序操作即可。
③最后返回排序后的数组$data。
五、总结
PHP中按照数组中某个字段进行排序是一个很常见的需求,掌握了这个技巧,能够让我们的开发变得更为简便。在实际开发中,还需要注意到一些性能问题,根据实际情况选择合适的排序方式和算法。