php二维数组多元素排序例子

二维数组排序的问题小编介绍过许多的方法了,这里看到一网友写的一款性能不错的php二维数组多元素排序例子,我们来看看。

写个二维数组的多元素排序,多元素排序类似sql中的order by sort,date,下面代码考虑性能问题,只涉及2个元素进行排序。

代码区:

  1. function multipleArraySort($old_arr,$arr1,$arr2){
  2. //排序第一个元素
  3. $old_arr = array_sort($old_arr,$arr1[0],$arr1[1]);
  4. $temp_array = $new_temp_array = array();
  5. foreach($old_arr as $k => $v){
  6. $key_count = count($old_arr)-1;
  7. //第一个元素数相等,放入临时数组
  8. if($v[$arr1[0]] == $old_arr[$k-1][$arr1[0]] || emptyempty($temp_array)){
  9. $temp_array[$k] = $v;
  10. }
  11. if(($v[$arr1[0]] != $old_arr[$k-1][$arr1[0]] && !emptyempty($temp_array)) || $key_count == $k){
  12. //添加最新元素
  13. $temp_array[$k] = $v;
  14. //数组大于1时,进行排序处理
  15. if(count($temp_array)>1){
  16. if($key_count != $k){
  17. //删除最后一个(与上一个不相等元素)
  18. unset($temp_array[$k]);
  19. }
  20. //不是最后或者最后相同,进行排序
  21. if($key_count != $k || $v[$arr1[0]] == $old_arr[$k-1][$arr1[0]]){
  22. //排序第二个元素
  23. $temp_array = array_sort($temp_array,$arr2[0],$arr2[1]);
  24. }
  25. //排序后把排序的数组,插入原数组排序前位置
  26. $count = count($new_temp_array)==0 ? 0 : count($new_temp_array);
  27. foreach($temp_array as $val_t){
  28. $new_temp_array[$count] = $val_t;
  29. $count++;
  30. }
  31. //写入新数组后清空原数组
  32. $temp_array = array();
  33. //添加最新元素
  34. $temp_array[$k] = $v;
  35. }
  36. }
  37. }
  38. return $new_temp_array;
  39. }
  40. //根据数组元素排序
  41. function array_sort($arr,$keys,$type='asc'){
  42. $keysvalue = $new_array = array();
  43. //获取元素值,生成新数组
  44. foreach ($arr as $k=>$v){
  45. $keysvalue[$k] = $v[$keys];
  46. }
  47. //排序,默认为正序
  48. if($type == 'asc'){
  49. asort($keysvalue);
  50. }else{
  51. arsort($keysvalue);
  52. } //phpfensi.com
  53. reset($keysvalue);
  54. $count_s = 0;
  55. //恢复键值
  56. foreach ($keysvalue as $k=>$v){
  57. $new_array[$count_s] = $arr[$k];
  58. $count_s++;
  59. }
  60. return $new_array;
  61. }

调用方法:

  1. $old_arr = array(
  2. array('id'=>1,'sort'=>1,'date'=>'1405648791'),
  3. array('id'=>2,'sort'=>1,'date'=>'1405649791'),
  4. array('id'=>3,'sort'=>2,'date'=>'1405647791'),
  5. );
  6. $arr1 = array('sort','desc');
  7. $arr2 = array('date','desc');
  8. $newArr = multipleArraySort($old_arr,$arr1,$arr2);
  9. var_dump($newArr);