array_multisort对多个数组或多维数组(数据库结果集)进行排序

array_multisort ( array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $... ]]] ) : bool
array_multisort() 可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。
关联(string)键名保持不变,但数字键名会被重新索引。
参数
 array1:要排序的 array。
 array1_sort_order:之前 array 参数要排列的顺序。 SORT_ASC 按照上升顺序排序, SORT_DESC 按照下降顺序排序。

此参数可以和 array1_sort_flags 互换,也可以完全删除,默认是 SORT_ASC 。
    ...
可选的选项,可提供更多数组,跟随在 sort order 和 sort flag 之后。

提供的数组和之前的数组要有相同数量的元素。换言之,排序是按字典顺序排列的。

成功时返回 TRUE, 或者在失败时返回 FALSE。

1、多个数组排序

$ar1 = array(10, 100, 100, 0);
$ar2 = array(1, 3, 2, 4);
array_multisort($ar1, $ar2);
print_r($ar1);
print_r($ar2);

第一个数组按升序排序,第二个数组按第一个数组的索引顺序进行排序而不是按自己的value值 ,针对第一个数组里相同的值100,第二个数组再按默认顺序升序2,3排序

2、排序多维数组 

<?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);
?>

 本例中在排序后,第一个数组将变成 "10",100,100,11,"a"(被当作字符串以升序排列)。第二个数组将包含 1, 3, "2", 2, 1(被当作数字以降序排列)。

3、对数据库结果进行排序

按照多个字段进行排序,主排序字段值相等时,再按照次排序字段排序

本例中 data 数组中的每个单元表示一个表中的一行。这是典型的数据库记录的数据集合。

例子中的数据如下:

 数据全都存放在名为 data 的数组中。这通常是通过循环从数据库取得的结果,例如 mysql_fetch_assoc()

$data = [
  array('volume' => 67, 'edition' => 2);
  array('volume' => 86, 'edition' => 1);
  array('volume' => 85, 'edition' => 6);
  array('volume' => 98, 'edition' => 2);
  array('volume' => 86, 'edition' => 6);
  array('volume' => 67, 'edition' => 7);
];

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

现在有了包含有行的数组,但是 array_multisort() 需要一个包含列的数组,因此用以下代码来取得列,然后排序。

<?php
// 取得列的列表
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);
?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值