0

0

一些php数组排序函数示例总结_PHP教程

php中文网

php中文网

发布时间:2016-07-13 17:00:27

|

1249人浏览过

|

来源于php中文网

原创

php中数组排序有很多函数可以实现的,如果是简单的一维数组排序我们可以使用php 自带的排序函数了,但多维数组时我们需要自己写了。


回来后一直在揪心啊,于是翻了一下书本查阅,给我知道了答案。为了记住它们,我决定来一个数组排序函数大总结。


首先接触的就是PHP数组排序、降序的排序问题。

sort:本函数为 array 中的单元赋予新的键名。这将删除原有的键名而不仅是重新排序。
rsort:本函数对数组进行逆向排序(最高到最低)。 删除原有的键名而不仅是重新排序。
asort:对数组进行排序并保持索引关系
arsort:对数组进行逆向排序并保持索引关系

ksort:对数组按照键名排序,保留键名到数据的关联
krsort:对数组按照键名逆向排序,保留键名到数据的关联

natsort:对字母数字字符串进行排序并保持原有键/值的关联
natcasesort:同natsort排序算法,但不区分大小写字母排序


PHP 数组排序(sort)
数字索引数组排序:
函数:sort(array, [sort type])
说明:sort()函数按升序对指定数组(第一个参数)进行排序。
sort函数第二参数作用为指定排序类型,是可选参数,可能的值为:
SORT_REGULAR: 默认值,不改变类型进行排序;
SORT_NUMERIC: 把值作为数字进行排序;
SORT_STRING: 把值作为字符串进行排序;
如数组中有4和”37″,按数字排序,4小于”37″;按字符串排序,4大于”37″;


一、一维数组

假设有一个一维数组,如下:


 $sortArr = array("name"=>"hiro", "age"=>"23", "city"=>"Shanghai", "code"=>"200051");
print_r()输出的原始数组结果为:


 Array ( [name] => hiro [age] => 23 [city] => Shanghai [code] => 200051 )

1.sort()函数:根据数组下标进行升序排列;
print_r()输出的数组结果为(输出时只有数组下标,而不是键名):

1
 Array ( [0] => 23 [1] => 200051 [2] => Shanghai [3] => hiro )

2.rsort()函数:与sort()函数相反,根据数组下标进行降序排列;
print_r()输出的数组结果为(输出时只有数组下标,而不是键名):


 Array ( [0] => hiro [1] => Shanghai [2] => 200051 [3] => 23 )

3.asort()函数:根据数组的键名进行升序排列;
print_r()输出的数组结果为:

1
 Array ( [age] => 23 [code] => 200051 [city] => Shanghai [name] => hiro )

4.arsort()函数:与asort()函数相反,根据数组的键名进行降序排列;
print_r()输出的数组结果为:


 Array ( [name] => hiro [city] => Shanghai [code] => 200051 [age] => 23 )

5.ksort()函数:根据数组的键值进行升序排列;
print_r()输出的数组结果为:


 Array ( [age] => 23 [city] => Shanghai [code] => 200051 [name] => hiro )

6.krsort()函数:与ksort()函数相反,根据数组的键值进行降序排列;
print_r()输出的数组结果为:

 代码如下 复制代码


 Array ( [name] => hiro [city] => Shanghai [code] => 200051 [age] => 23 )

7.reverse_array()函数:反向当前的数组排列顺序;
print_r()输出的数组结果为:

 

 代码如下 复制代码
 Array ( [name] => hiro [age] => 23 [city] => Shanghai [code] => 200051 )

8.shuffle()函数:随机地排列数组顺序(每次刷新后排列的顺序都不相同);
print_r()输出的数组结果为(只是其中一种随机排列):


 Array ( [0] => 23 [1] => 200051 [2] => Shanghai [3] => hiro )

二、二维数组
假设有一个二维数组,如下:

 代码如下 复制代码

 $person = array(
 array("hiro", "23", "suzhou"),
 array("yoyo", "25", "shanghai"),
 array("janstar", "28", "xinjiang")
);
print_r()输出的原始数组结果为:

1
 Array ( [0] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [1] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) [2] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) )

二维数组的排序是根据每维的键名排序的,所以需要额外地编写比较函数。先举三个例子:

1.按每维的第一个元素升序排列,代码如下:

 代码如下 复制代码

function compare0($x, $y) {
 if($x[0] == $t[0]) {
  return 0;
 } elseif ($x[0]   return -1;
 } else {
  return 1;
 }
}
 
usort($person, compare0);
echo "按第一个元素正向排序:";
print_r($person);
输出的结果如下:

1
 按第一个元素正向排序:Array ( [0] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [1] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) [2] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) )

2.按每维的第三个元素升序排列,代码如下:

考拉新媒体导航
考拉新媒体导航

考拉新媒体导航——新媒体人的专属门户网站

下载

立即学习PHP免费学习笔记(深入)”;

 代码如下 复制代码

function compare2($x, $y) {
 if($x[2] == $t[2]) {
  return 0;
 } elseif ($x[2]   return -1;
 } else {
  return 1;
 }
}
 
usort($person, compare2);
echo "按第三个元素正向排序:";
print_r($person);
输出的结果如下:


 按第三个元素正向排序:Array ( [0] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) [1] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [2] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) )

3.按每维的第三个元素升序排列,代码如下:

 代码如下 复制代码
function reverse_compare2($x, $y) {
 if($x[2] == $t[2]) {
  return 0;
 } elseif ($x[2]   return 1; //改变后即可反向
 } else {
  return -1; //改变后即可反向
 }
}
 
usort($person, reverse_compare2);

echo "按第三个元素反向排序:";
print_r($person);
输出的结果如下:

1
 按第三个元素反向排序:

 代码如下 复制代码
Array ( [0] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) [1] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [2] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) )

呵呵,是不是代码多了点,记下了以后方便查阅啊!

 代码如下 复制代码

error_reporting(0);

/**
* @数字数组排序 可按从大到小或从小到大排序 
*/
function sortArray($array, $choice) {
    $values = array_values($array); // 建立一个数字索引的数组
    $ch = $choice==0 ? min:max; // 参数$choice为0按从小到大排列,否则其他都默认为按从大到小
    do {
        $val = $ch($values); // 找出最大或最小值
        $key = array_search($val,$values); // 取得最大值的键名
        $result[$key] = $val; // 将最大值存入新数组
        unset($values[$key]);
    } while (count($values) > 0);
    return $result;
}

$array = array(100, 1000, 1, 10000);
//$array = sortArray($array, 0);
$array = sortArray($array, 1);
foreach($array as $a) {
    echo "$a ";
}
?>

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/631241245.htmlTechArticle在php中数组排序有很多函数可以实现的,如果是简单的一维数组排序我们可以使用php 自带的排序函数了,但多维数组时我们需要自己写了。...

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

1

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

1

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

0

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

0

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

3

2026.01.29

clawdbot ai使用教程 保姆级clawdbot部署安装手册
clawdbot ai使用教程 保姆级clawdbot部署安装手册

Clawdbot是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

24

2026.01.29

clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址
clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址

clawdbot龙虾机器人官网入口:https://clawd.bot/,clawdbot ai是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

16

2026.01.29

Golang 网络安全与加密实战
Golang 网络安全与加密实战

本专题系统讲解 Golang 在网络安全与加密技术中的应用,包括对称加密与非对称加密(AES、RSA)、哈希与数字签名、JWT身份认证、SSL/TLS 安全通信、常见网络攻击防范(如SQL注入、XSS、CSRF)及其防护措施。通过实战案例,帮助学习者掌握 如何使用 Go 语言保障网络通信的安全性,保护用户数据与隐私。

8

2026.01.29

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

576

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 8万人学习

Git 教程
Git 教程

共21课时 | 3.1万人学习

Django 教程
Django 教程

共28课时 | 3.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号