PHP 数组怎么排序

你有没有遇到过这种情况:手里攒了一堆零散的信息,比如攒了好几个朋友的奶茶订单金额,想知道谁点的最贵、谁排第三;或者存了一周的外卖花费,想从少到多理清楚开支——要是一个个翻着比,不仅乱还容易出错。这时候,用PHP处理这类数据排序,就像给零散的东西找了个“自动排队工具”,能省不少功夫。

不少刚接触PHP的朋友,总觉得“数组排序”是复杂的技术操作,其实只要分清楚排序的需求,用对应方法就能搞定,咱们从最常见的几种情况说起。

PHP 数组怎么排序

只需要排序数值或单个字符串的简单数组

这是最基础的情况,比如存了一周的快递配送时长(单位:分钟):$durations = [25, 18, 32, 22, 15],或者几个城市的名称:$cities = ["广州", "北京", "上海", "深圳"]。

如果想从短到长排配送时长,直接用sort()函数就行,它会把原数组按从小到大重新排列,而且排序后原数组的位置会变,不用额外存新变量。比如代码里写sort($durations),执行后数组就变成了[15, 18, 22, 25, 32]。要是想从大到小排,就换rsort(),刚才的时长数组用rsort()后,就变成[32, 25, 22, 18, 15]。

如果是存城市的字符串,sort()会按拼音首字母排序,执行后数组就变成["北京", "广州", "上海", "深圳"],刚好符合日常的拼音排序习惯,不用额外调整。

要保留“数据对应关系”的关联数组

如果你的数组不是简单的数值或字符串,而是“一一对应”的键值对,比如存了每个朋友的奶茶订单金额:$orderAmounts = ["小明" => 28, "小红" => 35, "小刚" => 22]——这时候要是用sort(),只会把数值排序,同时把原来的“小明、小红”这些名字键给打乱,就分不清是谁花了多少钱了。

这时候就得用asort()(从小到大)或者arsort()(从大到小),它们排序时会保留键和值的对应关系。比如执行asort($orderAmounts)后,数组会变成["小刚" => 22, "小明" => 28, "小红" => 35],既能看到金额从少到多,也知道对应着谁的订单。要是想按金额从大到小排,用arsort()就会得到["小红" => 35, "小明" => 28, "小刚" => 22],完全不会搞混对应关系。

按“自定义规则”排序的特殊情况

有时候需要的排序不是默认的大小或字母顺序,比如想把订单按“周末的订单排前面,工作日的排后面”,或者按“订单金额超过30的排前面,剩下的按金额排”。这时候就用usort()(普通数组)或uasort()(保留键的关联数组),可以自己写排序的判断规则。

比如刚才的朋友订单数组,要是想让“花30以上的排前面,剩下的按金额从小到大排”,可以这么写:

`php

uasort($orderAmounts, function($a, $b) {

// 先判断两个值是否都超过30

$aOver = $a >= 30;

$bOver = $b >= 30;

if ($aOver != $bOver) return $bOver - $aOver;

// 同一类的话按数值比大小

return $a - $b;

});

`

执行后数组就会变成["小红" => 35, "小明" => 28, "小刚" => 22]——小红的金额超30排第一,小明和小刚的金额没超,按从小到大排在后面,完全符合自定义的需求。

其实PHP的数组排序就像给东西排队,不同的工具对应不同的排队需求:简单的东西用普通排序,带对应关系的用保留键的排序,有特殊要求的就用自定义规则排序,不用怕复杂,分清楚需求选对方法就够了。

上一篇 Swift编程语言核心特性与应用场景科普 助你快速掌握开发高效iOS应用的关键