当前位置:首页 > PHP教程 > php数组 > 列表

PHP二维数组排序的3种方法和自定义函数分享

发布:smiling 来源: PHP粉丝网  添加日期:2020-11-08 15:36:45 浏览: 评论:0 

这篇文章主要介绍了PHP二维数组排序的3种方法和自定义函数分享,需要的朋友可以参考下。

关于排序一般我们都是通过数据库或者nosql(eg:redis)先排好序然后输出到程序里直接使用,但是有些时候我们需要通过PHP直接来对数组进行排序,而在PHP里存储数据用到最多的就是对象和数组,但处理较多的就是数组,因为有非常丰富的内置函数库(其实对象一定程度上也可以理解为是数组),这些函数库很大程度上可以帮助我们实现某些功能。常用的系统函数有sort、asort、arsort、ksort、krsort等等,这里我主要说下对二维数组的排序,两种方法:

一、用PHP自带array_multisort函数排序,代码如下:

  1. <?php
  2.     $data = array(); 
  3.     $data[] = array('volume' => 67, 'edition' => 2); 
  4.     $data[] = array('volume' => 86, 'edition' => 1); 
  5.     $data[] = array('volume' => 85, 'edition' => 6); 
  6.     $data[] = array('volume' => 98, 'edition' => 2); 
  7.     $data[] = array('volume' => 86, 'edition' => 6); 
  8.     $data[] = array('volume' => 67, 'edition' => 7); 
  9.  
  10.     // 取得列的列表 
  11.     foreach ($data as $key => $row
  12.     { 
  13.         $volume[$key]  = $row['volume']; 
  14.         $edition[$key] = $row['edition']; 
  15.     } 
  16.  
  17.     array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data); 
  18.  
  19.     print_r($data); 
  20. ?> 

输出结果:

  1. Array 
  2.     [0] => Array 
  3.         ( 
  4.             [volume] => 98 
  5.             [edition] => 2 
  6.         ) 
  7.     [1] => Array 
  8.         ( 
  9.             [volume] => 86 
  10.             [edition] => 1 
  11.         ) 
  12.     [2] => Array 
  13.         ( 
  14.             [volume] => 86 
  15.             [edition] => 6 
  16.         ) 
  17.     [3] => Array 
  18.         ( 
  19.             [volume] => 85 
  20.             [edition] => 6 
  21.         ) 
  22.     [4] => Array 
  23.         ( 
  24.             [volume] => 67 
  25.             [edition] => 2 
  26.         ) 
  27.     [5] => Array 
  28.         ( 
  29.             [volume] => 67 
  30.             [edition] => 7 
  31.         ) 

关于array_multisort官方文档也有比较详细的说明:http://www.php.net/manual/zh/function.array-multisort.php

二、自定义函数排序1,代码如下:

  1. <?php 
  2.     $data = array(); 
  3.     $data[] = array('volume' => 67, 'edition' => 2); 
  4.     $data[] = array('volume' => 86, 'edition' => 1); 
  5.     $data[] = array('volume' => 85, 'edition' => 6); 
  6.     $data[] = array('volume' => 98, 'edition' => 2); 
  7.     $data[] = array('volume' => 86, 'edition' => 6); 
  8.     $data[] = array('volume' => 67, 'edition' => 7); 
  9.  
  10.     // 取得列的列表 
  11.     foreach ($data as $key => $row
  12.     { 
  13.         $volume[$key]  = $row['volume']; 
  14.         $edition[$key] = $row['edition']; 
  15.     } 
  16.  
  17.     $ret = arraySort($data'volume''desc'); 
  18.  
  19.     print_r($ret); 
  20.  
  21.     /** 
  22.      * @desc arraySort php二维数组排序 按照指定的key 对数组进行排序 
  23.      * @param array $arr 将要排序的数组 
  24.      * @param string $keys 指定排序的key 
  25.      * @param string $type 排序类型 asc | desc 
  26.      * @return array 
  27.      */ 
  28.     function arraySort($arr$keys$type = 'asc') { 
  29.         $keysvalue = $new_array = array(); 
  30.         foreach ($arr as $k => $v){ 
  31.             $keysvalue[$k] = $v[$keys]; 
  32.         } 
  33.         $type == 'asc' ? asort($keysvalue) : arsort($keysvalue); 
  34.         reset($keysvalue); 
  35.         foreach ($keysvalue as $k => $v) { 
  36.            $new_array[$k] = $arr[$k]; 
  37.         } 
  38.         return $new_array
  39.     } 
  40. ?> 

输出结果:

  1. Array 
  2.     [3] => Array 
  3.         ( 
  4.             [volume] => 98 
  5.             [edition] => 2 
  6.         ) 
  7.  
  8.     [4] => Array 
  9.         ( 
  10.             [volume] => 86 
  11.             [edition] => 6 
  12.         ) 
  13.  
  14.     [1] => Array 
  15.         ( 
  16.             [volume] => 86 
  17.             [edition] => 1 
  18.         ) 
  19.  
  20.     [2] => Array 
  21.         ( 
  22.             [volume] => 85 
  23.             [edition] => 6 
  24.         ) 
  25.  
  26.     [5] => Array 
  27.         ( 
  28.             [volume] => 67 
  29.             [edition] => 7 
  30.         ) 
  31.  
  32.     [0] => Array 
  33.         ( 
  34.             [volume] => 67 
  35.             [edition] => 2 
  36.         ) 
  37.  

这个自定义函数与系统函数的一个区别就是:自定义函数只支持针对某一个key的排序,如果要支持多个key的排序需要执行多次; 而系统函数array_multisort可以一次性对多个key且可以指定多个排序规则,系统函数还是相当强大的,推荐使用系统函数,毕竟是C底层实现的,这里只是举例说明如果通过自定义函数来对数组进行排序,当然这个自定义函数也可以继续扩展来支持更多的排序规则。在取排名、排行榜、成绩等场景中用到的还是非常多的。

三、自定义函数排序2

以下函数是对一个给定的二维数组按照指定的键值进行排序,先看函数定义:

  1. function array_sort($arr,$keys,$type='asc'){  
  2.  $keysvalue = $new_array = array(); 
  3.  foreach ($arr as $k=>$v){ 
  4.   $keysvalue[$k] = $v[$keys]; 
  5.  } 
  6.  if($type == 'asc'){ 
  7.   asort($keysvalue); 
  8.  }else
  9.   arsort($keysvalue); 
  10.  } 
  11.  reset($keysvalue); 
  12.  foreach ($keysvalue as $k=>$v){ 
  13.   $new_array[$k] = $arr[$k]; 
  14.  } 
  15.  return $new_array;  

它可以对二维数组按照指定的键值进行排序,也可以指定升序或降序排序法(默认为升序),用法示例:

  1. $array = array
  2.  array('name'=>'手机','brand'=>'诺基亚','price'=>1050), 
  3.  array('name'=>'笔记本电脑','brand'=>'lenovo','price'=>4300), 
  4.  array('name'=>'剃须刀','brand'=>'飞利浦','price'=>3100), 
  5.  array('name'=>'跑步机','brand'=>'三和松石','price'=>4900), 
  6.  array('name'=>'手表','brand'=>'卡西欧','price'=>960), 
  7.  array('name'=>'液晶电视','brand'=>'索尼','price'=>6299), 
  8.  array('name'=>'激光打印机','brand'=>'惠普','price'=>1200) 
  9. ); 
  10.  
  11. $ShoppingList = array_sort($array,'price'); 
  12. print_r($ShoppingList); 

上面是对$array这个二维数组按照'price'从低到高的排序。

Tags: PHP二维数组排序

分享到: