PHP数组排序

本文介绍如何使用PHP对数据库查询结果进行排序,特别是针对MySQL中使用in语句获取的数据。通过示例展示了如何利用array_multisort()函数实现多列排序,并提及其他可用的排序函数。
PHP数组排序实际上就是将PHP数组进行排序,在本文中也就是对数据库查询出来的结果集进行排序。数据库查询结果有时候不能直接使用,比如mysql等用in语句出来的结果,因此需要对结果进行某种方式的排序。
PHP数组排序实际上就是将PHP数组进行排序,在本文中也就是对数据库查询出来的结果集进行排序。数据库查询结果有时候不能直接使用,比如mysql等用in语句出来的结果,因此需要对结果进行某种方式的排序。这时候就需要进行PHP数组排序了。对数据库结果进行排序请看下面的示例:

本例中data 数组中的每个单元表示一个表中的一行。这是典型的数据库存放数组数据的方式。
例子中的数据如下:
volume | edition
-------+--------
67 | 2
86 | 1
85 | 6
98 | 2
86 | 6
67 | 7

数据全都存放在名为 data 的数组中。这通常是通过循环从数据库取得的结果,例如 mysql_fetch_assoc()(实际上这个函数你可以和mysql_fetch_assoc()函数看成一样,具体的差别你可以看PHP的手册里面关于key的差别)。
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);

本例中将把 volume 降序排列,把 edition 升序排列。

现在有了包含有行的数组,但是 array_multisort() 需要一个包含列的数组,因此用以下代码来取得列,然后排序。
// 取得列的列表
foreach ($data as $key => $row) {
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}

// 将数据根据 volume 降序排列,根据 edition 升序排列
// 把 $data 作为最后一个参数,以通用键排序
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);

数据集合现在排好序了,结果如下:
volume | edition
-------+--------
98 | 2
86 | 1
86 | 6
85 | 6
67 | 2
67 | 7

实际上真正在排序的时候还有很多方法可以使用,比如php的array数组自带的arsort(),asort(),ksort(),krsort(),natsort(),natcasesort(),rsort(),usort(),array_multisort() 和 uksort()。
本篇文章来源于 PHP资讯 原文链接:http://www.phpq.net/tutorial/php-array-sort.html
PHP 提供了多种对数组进行排序的方式,可以根据需求选择不同的方法。以下是几种常见的 PHP 数组排序方式及其特点: ### 1. **sort()** - 功能:将数组按照升序排列,数字从小到大、字符串按字母顺序。 - 特点:仅保留数值索引数组的元素值,原有的键名将会丢失,并赋予新的索引。 ```php $arr = [3, 7, 5, 6]; sort($arr); print_r($arr); // 输出 Array([0] => 3, [1] => 5, [2] => 6, [3] => 7) ``` ### 2. **rsort()** - 功能:降序排列数组,类似于 `sort()`,只不过是从高到底排。 - 特点:同样会重新建立数字索引。 ```php rsort($arr); print_r($arr); // 输出 Array([0] => 7, [1] => 6, [2] => 5, [3] => 3) ``` ### 3. **asort()** - 功能:保持原数组中的键值关联关系的前提下,依据元素值做升序排序。 - 应用于关联数组。 ```php $assoc_arr = ["a" => "apple", "b" => "banana", "c" => "cherry"]; asort($assoc_arr); print_r($assoc_arr); /* 输出结果: Array( [a] => apple, [b] => banana, [c] => cherry ) */ ``` ### 4. **arsort()** - 功能:和 `asort()` 类似,但按降序排列。 ### 5. **ksort() 和 krsort()** - 这两个函数分别是以键名为基础来进行升序 (`ksort`) 或者降序 (`krsort`) 的排序。 ```php ksort($assoc_arr); ``` ### 其他高级用法 对于更复杂的情况可以考虑用户自定义比较规则的排序: - `usort(callback function)` - 对于多维数组可尝试结合遍历与以上提到的基本功能组合起来实现复杂的排序逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值