PHP数组排序函数合集 以及它们之间的联系分析


Posted in PHP onJune 27, 2013

下边提到的几个数组函数的排序有一些共性:
1 数组被作为排序函数的参数,排序以后,数组本身就发生了改变,函数的返回值为bool类型。
2 函数名中出现单a表示association,含义为,在按值排序的过程中,保持key=>value的对应关系不变
3 函数名中出现单k表示key,含义为,在按值排序的过程中按照数组key而不是数组的值排序
4 函数名中出现单r的表示reverse,含义为,按照跟不加r的相反的顺序排列
5 函数名中出现单u的表示user-defined,含义为,使用用户自定义函数排序,如果函数的逻辑是参数1<参数2返回负数,则按照升序排列(p1小2返负升)。
--------------------sort函数升序排序--------------------------------

bool sort ( array &$array [, int $sort_flags= SORT_REGULAR ] )
<?php
$fruits = array("lemon", "orange", "banana", "apple");
sort($fruits);
var_dump($fruits);
?>
结果:
array
0 => 
string
 'apple' (length=5)
  1 => 
string
 'banana' (length=6)
  2 => 
string
 'lemon' (length=5)
  3 => 
string
 'orange' (length=6)

--------------------rsort降序排列--------------------
<?php
$fruits = array("lemon", "orange", "banana", "apple");
rsort($fruits);
var_dump($fruits);
?>
结果:
array
  0 => 
string
 'orange' (length=6)
  1 => 
string
 'lemon' (length=5)
  2 => 
string
 'banana' (length=6)
  3 => 
string
 'apple' (length=5)

---------------asort按照二维数组值的升序排列(保持key=>value的关联关系)-----------
<?php
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
asort($fruits);
var_dump($fruits);
?>
结果:
array
  'c' => 
string
 'apple' (length=5)
  'b' => 
string
 'banana' (length=6)
  'd' => 
string
 'lemon' (length=5)
  'a' => 
string
 'orange' (length=6)

---------arsort按照二维数组值的降序排列(保持key=>value的关联关系)---------
<?php
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
arsort($fruits);
var_dump($fruits);
?>
结果
array
  'a' => 
string
 'orange' (length=6)
  'd' => 
string
 'lemon' (length=5)
  'b' => 
string
 'banana' (length=6)
  'c' => 
string
 'apple' (length=5)

--------------------ksort按照数组的key升序排列--------------
<?php
$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
ksort($fruits);
var_dump($fruits);
?>
结果
array
'a' => 
string
 'orange' (length=6)
  'b' => 
string
 'banana' (length=6)
  'c' => 
string
 'apple' (length=5)
  'd' => 
string
 'lemon' (length=5)
 

---------------------krsort按照数组key的降序排列-----------------------
<?php
$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
krsort($fruits);
var_dump($fruits);
?>
array
  'd' => 
string
 'lemon' (length=5)
  'c' => 
string
 'apple' (length=5)
  'b' => 
string
 'banana' (length=6)
  'a' => 
string
 'orange' (length=6)
 

----------------usort函数按照用户自定义的函数排序----------------
<?php
function cmp($a, $b)
{
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}
$a = array(3, 2, 5, 6, 1);
usort($a, "cmp");
var_dump($a);
?>

结果:
array
  0 =>
int
 1
  1 =>
int
 2
  2 =>
int
 3
  3 =>
int
 5
  4 =>
int
 6
-----------------uksort使用自定义函数按照数组的key排序-----------------
<?php
function cmp($a, $b)
{
    $a = preg_replace('@^(a|an|the) @', '', $a);
    $b = preg_replace('@^(a|an|the) @', '', $b);
    return strcasecmp($a, $b);
}
$a = array("John" => 1, "the Earth" => 2, "an apple" => 3, "a banana" => 4);
uksort($a, "cmp");
var_dump($a);
?>

结果:
array
  'an apple' =>
int
 3
  'a banana' =>
int
 4
  'the Earth' =>
int
 2
  'John' =>
int
 1
--------------uasort将数组用自定义函数按照value排序,保持索引关系不变---------
<?php
// Comparison function
function cmp($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}
// Array to be sorted
$array = array('a' => 4, 'b' => 8, 'c' => -1, 'd' => -9, 'e' => 2, 'f' => 5, 'g' => 3, 'h' => -4);
var_dump($array);
// Sort and print the resulting array
uasort($array, 'cmp');
var_dump($array);
?>

结果:
array
  'a' =>
int
 4
  'b' =>
int
 8
  'c' =>
int
 -1
  'd' =>
int
 -9
  'e' =>
int
 2
  'f' =>
int
 5
  'g' =>
int
 3
  'h' =>
int
 -4
array
  'd' =>
int
 -9
  'h' =>
int
 -4
  'c' =>
int
 -1
  'e' =>
int
 2
  'g' =>
int
 3
  'a' =>
int
 4
  'f' =>
int
 5
  'b' =>
int
 8
-------------------array_multisort排序多个数组或多维数组---------
<?php
$ar = array(
       array("10", 11, 100, 100, "a"),
       array(   1,  2, "2",   3,   1)
      );array_multisort($ar[0], SORT_ASC, SORT_STRING,
                $ar[1], SORT_NUMERIC, SORT_DESC);
var_dump($ar);
?>

结果:
array
  0 =>
    array
      0 =>
string
 '10' (length=2)
      1 =>
int
 100
      2 =>
int
 100
      3 =>
int
 11
      4 =>
string
 'a' (length=1)
  1 =>
    array
      0 =>
int
 1
      1 =>
int
 3
      2 =>
string
 '2' (length=1)
      3 =>
int
 2
      4 =>
int
1
//说明:
1 上例中:$ar数组优先按照$ar[0]的字符串值升序排列,如果字符串值相等,再按照$ar[1]数组的数字值降序排列。
2 array_multisort函数的任意一个位置的参数如果是数组,表示排序时用的值,
如果有多个数组参数,优先按照前边的数组值进行排序,如果是常量,例如
SORT_ASC, SORT_DESC, SORT_REGULAR,SORT_NUMERIC, SORT_STRING.
表示排序方法(数组取值前优先)。
==========================================================================================
PHP二维数组排序函数
PHP一维数组的排序可以用sort(),asort(),arsort()等函数,但是PHP二维数组的排序需要自定义。
以下函数是对一个给定的二维数组按照指定的键值进行排序,先看函数定义:
function array_sort($arr,$keys,$type='asc'){
$keysvalue = $new_array = array();
foreach ($arr as $k=>$v){
$keysvalue[$k] = $v[$keys];
}
if($type == 'asc'){
asort($keysvalue);
}else{
arsort($keysvalue);
}
reset($keysvalue);
foreach ($keysvalue as $k=>$v){
$new_array[$k] = $arr[$k];
}
return $new_array;
}

它可以对二维数组按照指定的键值进行排序,也可以指定升序或降序排序法(默认为升序),用法示例:
$array = array(
array('name'=>'手机','brand'=>'诺基亚','price'=>1050),
array('name'=>'笔记本电脑','brand'=>'lenovo','price'=>4300),
array('name'=>'剃须刀','brand'=>'飞利浦','price'=>3100),
array('name'=>'跑步机','brand'=>'三和松石','price'=>4900),
array('name'=>'手表','brand'=>'卡西欧','price'=>960),
array('name'=>'液晶电视','brand'=>'索尼','price'=>6299),
array('name'=>'激光打印机','brand'=>'惠普','price'=>1200)
);
$ShoppingList = array_sort($array,'price');
print_r($ShoppingList);

上面是对$array这个二维数组按照'price'从低到高的排序。
输出结果:(略)。
PHP 相关文章推荐
php生成随机数或者字符串的代码
Sep 05 PHP
PHP学习之整理字符串
Apr 17 PHP
php+mysqli预处理技术实现添加、修改及删除多条数据的方法
Jan 30 PHP
PHP加密解密类实例分析
Apr 20 PHP
nginx+thinkphp下解决不支持pathinfo模式
Jul 01 PHP
ThinkPHP2.x防范XSS跨站攻击的方法
Sep 25 PHP
Laravel中使用Queue的最基本操作教程
Dec 27 PHP
PHP递归实现快速排序的方法示例
Dec 18 PHP
PHP通过GD库实现验证码功能示例
Feb 23 PHP
Codeigniter里的无刷新上传的实现代码
Apr 14 PHP
laravel 5.5 关闭token的3种实现方式
Oct 24 PHP
TP5框架使用QueryList采集框架爬小说操作示例
Mar 26 PHP
解析file_get_contents模仿浏览器头(user_agent)获取数据
Jun 27 #PHP
基于php常用函数总结(数组,字符串,时间,文件操作)
Jun 27 #PHP
浅析php中抽象类和接口的概念以及区别
Jun 27 #PHP
领悟php接口中interface存在的意义
Jun 27 #PHP
CURL状态码列表(详细)
Jun 27 #PHP
解析linux下安装memcacheq(mcq)全过程笔记
Jun 27 #PHP
php删除字符串末尾子字符,删除开始字符,删除两端字符(实现代码)
Jun 27 #PHP
You might like
Protoss兵种介绍
2020/03/14 星际争霸
PDO预处理语句PDOStatement对象使用总结
2014/11/20 PHP
PHP实现返回JSON和XML的类分享
2015/01/28 PHP
分享一个Laravel好用的Cache宏
2015/03/02 PHP
CI框架支持$_GET的两种实现方法
2016/05/18 PHP
使用PHP json_decode可能遇到的坑与解决方法
2017/08/03 PHP
php面向对象基础详解【星际争霸游戏案例】
2020/01/23 PHP
检测是否已安装 .NET Framework 3.5的js脚本
2009/02/14 Javascript
JQuery EasyUI 加载两次url的原因分析及解决方案
2014/08/18 Javascript
jQuery中[attribute*=value]选择器用法实例
2014/12/31 Javascript
JavaScript控制两个列表框listbox左右交换数据的方法
2015/03/18 Javascript
uploadify多文件上传参数设置技巧
2015/11/16 Javascript
js放到head中失效的原因与解决方法
2017/03/07 Javascript
ztree简介_动力节点Java学院整理
2017/07/19 Javascript
js图片轮播插件的封装
2017/07/21 Javascript
js隐式转换的知识实例讲解
2018/09/28 Javascript
基于element-ui组件手动实现单选和上传功能
2018/12/06 Javascript
仿vue-cli搭建属于自己的脚手架的方法步骤
2019/04/17 Javascript
Python 实现删除某路径下文件及文件夹的实例讲解
2018/04/24 Python
Python图像处理之简单画板实现方法示例
2018/08/30 Python
Python3中在Anaconda环境下安装basemap包
2018/10/21 Python
pycharm debug功能实现跳到循环末尾的方法
2018/11/29 Python
用python绘制樱花树
2020/10/09 Python
基于Python的接口自动化unittest测试框架和ddt数据驱动详解
2021/01/27 Python
python3.9.1环境安装的方法(图文)
2021/02/02 Python
澳大利亚领先的在线美容商城:Adore Beauty
2017/04/14 全球购物
澳洲健康食品网上商店:Aussie Health Products
2018/06/15 全球购物
给排水工程师岗位职责
2013/11/21 职场文书
通信工程专业毕业生推荐信
2013/12/25 职场文书
宿舍违规检讨书
2014/01/12 职场文书
党员批评与自我批评
2014/02/12 职场文书
计划生育证明书写要求
2014/09/17 职场文书
见习报告的格式
2014/10/31 职场文书
vue组件的路由高亮问题解决方法
2021/05/11 Vue.js
Vue鼠标滚轮滚动切换路由效果的实现方法
2021/08/04 Vue.js
利用JavaScript写一个简单计算器
2021/11/27 Javascript